// deepMFC.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "iostream"
using namespace std;
class CObject {
public:
virtual void Serialize() { cout<<"CObject::Serialize()\n\n";}};
class CDocument : public CObject {
public:
int m_data1;
void fun() { cout<<"CDocument::func()"<<endl;
Serialize();}
virtual void Serialize(){ cout<<"CDocument::Serialize()\n\n"; }
};
class CMyDoc : public CDocument {
public:
int m_data2;
virtual void Serialize() { cout<<"CMyDoc::Serialize()\n\n"<<endl;}};
int _tmain(int argc, _TCHAR* argv[])
{
CMyDoc mydoc;
CMyDoc* pmydoc = new CMyDoc;
cout<<"#1 tessting"<<endl;
mydoc.fun();
cout<<"#2 testing"<<endl;
((CDocument*)(&mydoc))->fun();
cout<<"#3 testing "<<endl;
pmydoc->fun();
cout<<"#4 testing "<<endl;
//由于((CDocument)mydoc).fun() 是个传值而非传地址动作,编译器以所谓的建构式把CDocument对象内容复制了一份,使得mydoc中的vtable与CDocument中的vtable一样,
((CDocument)mydoc).fun(); //经过所谓data slicing,本例的mydoc真正变成了一个完完全全的CDocument
//物件,
getchar();
return 0;
}
浙公网安备 33010602011771号