让我们想象一下我有一个名为' Base'使用名为foo()的虚拟纯方法和2个子类(Inherited1和Inherited2),它们都以自己的方式实现此方法。现在让我们说其中一个子节点(Inherited1)需要另一个名为bar()的方法,在Inherited2中实现是没有意义的。
在我的主人,我有
Base * randomObject = new Inherited1();
我无法使用
访问此方法random->bar();
我该怎么办?就像我说的那样,在inherited2中实现它是没有意义的,所以我不能简单地在Base中添加另一个虚拟方法,或者我应该吗?
答案 0 :(得分:2)
如果您有变量
Base* randomObject = new Inherited1();
您可以将其强制转换为基类
Inherited1* foo = static_cast<Inherited1*>(randomObject);
foo->bar();
但是你必须确保指针确实是那个派生类,否则static_cast
是不安全的。有很多方法可以执行此操作,例如将enum
存储在可以通过virtual
getter检查的派生类中,或者检查dynamic_cast
的结果是否为{ {1}},但速度较慢。