一个类型转换问题
#include <iostream>
using namespace std;
class CObject
{
public:
virtual void Serialize()
{
cout < < "CObject::Serialize() " < <endl < <endl;
}
};
class CDocument:CObject
{
public:
int m_datal;
void func()
{
cout < < "CDocmuent::func() " < <endl;
Serialize();
}
virtual void Serialize()
{
cout < < "CDocument::Serilalize() " < <endl < <endl;
}
};
class CMyDoc:public CDocument
{
public:
int m_data2;
virtual void Serialize()
{
cout < < "CMyDoc::Serialize() " < <endl < <endl;
}
};
int main()
{
CMyDoc mydoc;
CMyDoc * pmydoc=new CMyDoc;
CDocument * p=new CDocument;
cout < < "#1 testing " < <endl;
mydoc.func();
cout < < "#2 testing " < <endl;
((CDocument*)(&mydoc))-> func();
cout < < "#3 testing " < <endl;
pmydoc-> func();
cout < < "#4 testing " < <endl;
p-> func();
return 0;
}
cout < < "#2 testing " < <endl;
((CDocument*)(&mydoc))-> func();
输出的是:
#2 testing
CDocument::func()
CMyDoc::Serialize()
对此我十分不解:我觉得((CDocument*)(&mydoc))-> func();应该和p-> func();是相同的啊 就是说((CDocument*)(&mydoc))和p是一样的 类型都应该是CDocument*啊 可是事实上不是这样的(结果说明) 这是为什么呢??那这样的类型转换((CDocument*)(&mydoc))有什么意思呢???还望指教!!!谢谢
[解决办法]
多态嘛。mydoc转CDocument*后的指针,运行时类型绑定为CMyDoc,虚函数起了作用。
见C++ Primer