c++ - 如何从父指针调用子方法?

标签 c++ inheritance polymorphism

我有一个基类和一个扩展它的子类。子类内部有自己的方法,父类没有。也就是说,在基类中将其声明为虚拟并不是一个真正的选择。

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/

相关文章:

java - 在Java中创建没有构造函数的子类实例

c++ - protected /私有(private)继承转换

c++ - C++ std::vector 的两个指针替代方案

c++ - 使用 C++98 标准填充二维静态 vector

java - 没有找到适合 ClassUser 的构造函数(无参数)

polymorphism - OCaml:具有通用键的 map 上的多态函数

java - Java 中的多态性和接口(interface)

c++ - 设置精度在分配的数字之前的小数点后给出零

c++ - 通过传递给函数 : Run-time check failure #2 来乘以矩阵

java——具有多态性和封装性的几何形状