首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个类型转换有关问题

2012-02-10 
一个类型转换问题#include iostreamusingnamespacestdclassCObject{public:virtualvoidSerialize(){cou

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

热点排行