我有一个基类和一个扩展它的子类。子类内部有自己的方法,父类没有。也就是说,在基类中将其声明为虚拟并不是一个真正的选择。
class A {
public:
virtual void helloWorld();
};
class B : public A {
public:
virtual void helloWorld();
void myNewMethod();
};
然后,在我的实现中,我有一个指向 A 的指针,并将其构造为 B:
// somewhere in a .cpp file
A* x;
x = new B();
x->myNewMethod(); // doesn't work
我目前的解决方案是转换它:
((B *)x)->myNewMethod();
我的问题是,是否有一种更简洁的方法来执行此操作,或者正在制定方法?
最佳答案
My question is, is there a cleaner way of doing this, or is casting the way to go?
在这种情况下,运行时转换似乎没问题。但是,您应该使用 dynamic_cast<>
,而不是 C 风格的强制转换。 (如果您不确定 x
是否实际指向类型为 B
的对象):
B* pB = dynamic_cast<B*>(x); // This will return nullptr if x does not point
// to an object of type B
if (pB != nullptr)
{
pB->myNewMethod();
}
另一方面,如果您确定x
指向 B
类型的对象, 那么你应该使用 static_cast<>
:
B* pB = static_cast<B*>(x);
pB->myNewMethod();
关于c++ - 如何从父指针调用子方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15326186/