This question already has answers here:
C++ cast to derived class
                                
                                    (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/

10-14 15:57
查看更多