通过指针访问派生类

时间:2016-12-29 23:02:11

标签: c++ oop pointers

我有什么:

class Item {} ;

class ChristmasItem : public Item
{
private:
string color;

public: get_color() { return color;} 

class Store{
Item* item1;
} ;

现在,如果Item * item1是ChristmasItem,我想检查它的颜色。我试过了

if (dynamic cast <ChristmasItem*> item1! =NULL) item1->get_color() ; 

没有成功。你能给我一些建议吗?

3 个答案:

答案 0 :(得分:2)

您的代码未正确使用dynamic_cast。您必须定义计划存储转换的所需类型的变量。

ChristmasItem *thisItem = dynamic_cast<ChristmasItem*>(item1);

然后:

 if (thisItem != nullptr) thisItem->getColor();

请注意,运行时类型信息(RTTI)是必需的,必须在某些开发环境中启用。

答案 1 :(得分:1)

您的代码中存在许多问题,如果您特别询问dynamic_cast,则只有拥有虚函数时才能应用dynamic_cast。

答案 2 :(得分:1)

您的代码即将完成您的目标,只需要进行一些调整。

首先,您需要向Item添加虚拟方法才能使用dynamic_cast。在这种情况下,虚拟析构函数就足够了:

class Item {
public:
    virtual ~Item() {}
};

其次,将您的dynamic_cast语句更改为以下内容:

if (ChristmasItem *item = dynamic cast<ChristmasItem*>(item1))
    item->get_color();