object slicing与虚函数

#include <iostream.h>

 

class CObject

{

public:

       virtual void Serialize() { cout<<"CObject::Serialize()/n/n";}

};

 

class CDocument:public CObject

{

public:

       void func()

       {

              cout<<"CDocument::func()"<<endl;

       //     Serialize();//这句代码主要是为了实现虚拟函数的调用

       }

       void Serialize() { cout<<"CDocument::Serialize()/n/n";}

};

 

class CMyDoc:public CDocument

{

public:

       void Serialize() { cout<<"CMyDoc::Serialize()/n/n";}

};

 

void main()

{

       CMyDoc mydoc;

       CMyDoc *pmydoc=new CMyDoc;

      

       cout<<"#1 testing"<<endl;

       mydoc.func();

      

       cout<<"#2 testing"<<endl;

       ((CDocument *)(&mydoc))->func();

      

       cout<<"#3 testing"<<endl;

       pmydoc->func();

      

       cout<<"#4 testing"<<endl;

       ((CDocument)mydoc).func();

}

 

运行结果1:(注释掉函数funcSerialize()的的情况)

#1 testing

CDocument::func()

#2 testing

CDocument::func()

#3 testing

CDocument::func()

#4 testing

CDocument::func()

 

运行结果2:(没注释的情况)

#1 testing

CDocument::func()

CMyDoc::Serialize()

 

#2 testing

CDocument::func()

CMyDoc::Serialize()

 

#3 testing

CDocument::func()

CMyDoc::Serialize()

 

#4 testing

CDocument::func()

CDocument::Serialize()

经过所谓的data slicing,本例的mydoc真正变成了一个完完全全的CDocument对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值