您的位置:首页 > 编程语言 > C语言/C++

C++ dynamic_cast小心得

2012-07-06 09:18 162 查看
dynamic_cast运算符可以在执行期决定真正的类型。

这里将一下进行类层次下行转化时一点小心得。

vs2005创建控制台程序。

源码如下:

DynamicCastTest.cpp

#include "stdafx.h"

struct StBaseInfo
{
int nID;
};

struct StExtendInfo : public StBaseInfo
{
int nAnything;
};

int _tmain(int argc, _TCHAR* argv[])
{
StBaseInfo* pBaseInfo = new StExtendInfo;
StExtendInfo* pExInfo = dynamic_cast<StExtendInfo*>(pBaseInfo);

delete pBaseInfo;
pBaseInfo = NULL;

return 0;
}


编译时报错:error C2683: 'dynamic_cast' : 'StBaseInfo' is not a polymorphic type。

原因在于StBaseInfo这个基类没有提供虚函数,要使用dynamic_cast下行转化虚函数是必须的。

我们修改StBaseInfo的析构函数为基函数,如下所示。

struct StBaseInfo
{
virtual ~StBaseInfo() {}
int nID;
};


再次编译,编译正常。运行一下,运行无误。^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: