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

请问一个Dynamic_cast的有关问题

2012-04-03 
请教一个Dynamic_cast的问题!#includestdafx.h #includeiostreamusingnamespacestdclassCCarclassCQ

请教一个Dynamic_cast的问题!
#include   "stdafx.h "
#include   <iostream>
using   namespace   std;

class   CCar;
class   CQQ;

class   CCar
{
public:
CCar(){
}

virtual   CCar   Clone(CCar*   prhs){
          cout   < <   "Car_Clone "   < <   endl;
}
};

class   CQQ:   public   CCar
{
public:
CQQ   Clone(CQQ*   prhs)
{
        cout   < <   "CQQ_Clone "   < <   endl;
}
private:
CQQ(const   CQQ&){}
};

int   main(int   argc,   char*   argv[])
{
//////////////   VC6.0   Compile
CCar*   pCar   =   new   CCar;
CQQ*   pQQ   =   (CQQ*)(pCar);                             //这样可以
//CQQ*   pQQ   =   dynamic_cast <CQQ*> (pCar);     //这里打开后出异常,为什么

if   (   pQQ)
{
pQQ-> Clone(   (CQQ*)pCar   );
}

return   0;
}

[解决办法]
有没有打开rtti
[解决办法]
VC?
RTTI没有打开?
[解决办法]
请打开Project Setting中的C/C++Page下的RTTI选项。应该就OK了。
[解决办法]
pCar 目前事实上指向一个 基类对象, 而要将它转向一个派生类对象, 这是个明显错误呀.

派生类 比 基类包含了更多的信息. 基类对象是派生类对象的子对象.

只有当, pCar 事实上指向一个派生类对象时(或派生类的派生类), dynamic_cast 才安全.

如:

Car * p = new QQ_Car;
QQ_Car * qq_p = dynamic_cast <QQ_Car *> (p);

热点排行