关于强制类型转换!
有这样一段代码!(摘自侯杰《深入浅出MFC第二章 Object slicing与虚拟函数》)
class CObject
{
public:
virtual void Serialize();
}
class CDocument : public CObject
{
public:
void func() {
Serialize();
}
virtual void Serialize() ;
};
class CMyDoc : public CDocument
{
public:
virtual void Serialize();
};
//------------------------------------------------------------------
void main()
{
CMyDoc mydoc;
CMyDoc* pmydoc = new CMyDoc;
cout << "#1 testing" << endl;
mydoc.func();
cout << "#2 testing" << endl;
((CDocument*)(&mydoc))->func();
//added by me
((CDocument*)(pmydoc))->func();
cout << "#3 testing" << endl;
pmydoc->func();
cout << "#4 testing" << endl;
((CDocument)mydoc).func();
}
对于test1,test3我都理解了。对于test4,书里面有解释说明,对于test2,我有一个疑惑。
1.
把CMyDoc类的指针强制转化成CDocument类的指针,那么这个指针所调用的方法,应该是CDocument的方法了,(这里也就是CDocument->func()),func()里面调用了Serialize()虚拟函数,而CDocument类也声明了这个虚拟函数,所以func()里面调用的Serialize函数就应该是CDocument的函数。
实际的结果的是调用的仍然是CMyDocument类的Serialize函数。
2.它和test4中((CDocument)mydoc).func();这种强制类型转换有什么区别呢?
哪位给解释一下?不胜感激。
困惑不一的菜鸟