一个关于虚函数的问题
本人在学习C++的虚函数部分时遇到了一个例子:
#include<iostream.h>
class CObject{
public :
virtual void Serialize(){
cout<<"CObject::Serialize()\n\n";
}
};
class CDocument:public CObject{
public :
int m_data1;
void func(){
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";}
};
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 testing
CDocument::func()
CMyDoc::Serialize()
#2 testing
CDocument::func()
CMyDoc::Serialize();
#3 testing
CDocument::func()
CMyDoc::Serialize()
#4 testing
CDocument::func()
CDocument::Serialize() <---------对此不解
前面三个我知道为什么是这样的,但是对第四个不太理解,有人能告诉我原因吗?
谢谢