65,211
社区成员
发帖
与我相关
我的任务
分享
#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 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(); // 输出: CMyDoc::Serialize()
/* 问题!!: 上面这行:这里已经强制转换为CDocument*,
为什么不调用CDocument::Serialize(),
却调用CMyDoc::Serialize() ?
或者问: 强制类型转换为什么不起作用啊 ?
*/
cout << "#3 testing ---" << endl;
pmydoc->func();
cout << "#4 testing ---" << endl;
((CDocument)mydoc).func();
}