读书人

一个类型转换有关问题

发布时间: 2012-02-10 21:27:42 作者: rapoo

一个类型转换问题
#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

读书人网 >C++

热点推荐