This question already has answers here:
C++ cast to derived class
(4个答案)
4年前关闭。
让我们想象一下这样一种情况:我有一个名为'Base'的抽象类,它带有一个名为foo()的虚拟纯方法,以及2个子代(Inherited1和Inherited2),它们都以自己的方式实现了该方法。现在,让我们说这些子级(Inherited1)中的一个需要另一个名为bar()的方法,该方法在Inherited2中实现是没有意义的。
我主要是
我无法使用
我该怎么办。就像我说的那样,在Inherited2中实现它没有任何意义,因此我不能简单地将另一个虚拟方法放在Base中,还是应该?
您可以将其转换为基础类
但是您必须确保指针确实是该派生类的指针,否则
(4个答案)
4年前关闭。
让我们想象一下这样一种情况:我有一个名为'Base'的抽象类,它带有一个名为foo()的虚拟纯方法,以及2个子代(Inherited1和Inherited2),它们都以自己的方式实现了该方法。现在,让我们说这些子级(Inherited1)中的一个需要另一个名为bar()的方法,该方法在Inherited2中实现是没有意义的。
我主要是
Base * randomObject = new Inherited1();
我无法使用
random->bar();
我该怎么办。就像我说的那样,在Inherited2中实现它没有任何意义,因此我不能简单地将另一个虚拟方法放在Base中,还是应该?
最佳答案
如果你有一个变量
Base* randomObject = new Inherited1();
您可以将其转换为基础类
Inherited1* foo = static_cast<Inherited1*>(randomObject);
foo->bar();
但是您必须确保指针确实是该派生类的指针,否则
static_cast
是不安全的。有很多方法可以做到这一点,例如将enum
存储在派生类中,您可以通过virtual
getter进行检查,或者检查dynamic_cast
的结果是否为nullptr
,但这就是慢点。关于c++ - 有没有一种方法可以将抽象对象转换到其子对象? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30199883/