现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

C++ dynamic_cast小心得

2012-08-21 06:09 工业·编程 ⁄ 共 599字 ⁄ 字号 暂无评论

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;
};

再次编译,编译正常。运行一下,运行无误。^_^

给我留言

留言无头像?