有没有办法将抽象对象强制转换为它的孩子?

时间:2015-05-12 19:31:55

标签: c++ inheritance polymorphism

让我们想象一下我有一个名为' Base'使用名为foo()的虚拟纯方法和2个子类(Inherited1和Inherited2),它们都以自己的方式实现此方法。现在让我们说其中一个子节点(Inherited1)需要另一个名为bar()的方法,在Inherited2中实现是没有意义的。

在我的主人,我有

Base * randomObject = new Inherited1();

我无法使用

访问此方法
random->bar();

我该怎么办?就像我说的那样,在inherited2中实现它是没有意义的,所以我不能简单地在Base中添加另一个虚拟方法,或者我应该吗?

1 个答案:

答案 0 :(得分:2)

如果您有变量

Base* randomObject = new Inherited1();

您可以将其强制转换为基类

Inherited1* foo = static_cast<Inherited1*>(randomObject);
foo->bar();

但是你必须确保指针确实是那个派生类,否则static_cast是不安全的。有很多方法可以执行此操作,例如将enum存储在可以通过virtual getter检查的派生类中,或者检查dynamic_cast的结果是否为{ {1}},但速度较慢。