C++:从父实例化调用子方法

C++ : Calling a child method from parent instantiation

本文关键字:调用 子方法 实例化 C++      更新时间:2023-10-16

在我的代码中,我实现了这些类:

class A
{
  public:
    virtual int fun() { return 0; }
}
class B : public A
{
  public:
    virtual int fun() { return 1; }
}

而这些功能:

void operation(A a)
{
  printf("%dn",a.fun());
}
int main()
{
  B b;
  operation(b);
  return 0;
}

如您所见,类 B 继承了 A,并实现了虚拟继承方法 fun() 。主类调用一个函数,该函数在参数中接受 A,并在参数中调用 fun() 方法,参数中有一个 B 对象。

在执行时,我希望打印字符串"1",但它是"0"(即使它是传递给operation()的 B 对象)。

我需要这样做,因为我有几个 B 类(B1、B2 等),我希望函数operation()是泛型的。我不需要在 A 类中实现 operation(),但是如果我声明operation()纯虚拟,编译失败operation()说我无法实例化 A(这是意料之中的)。

我发现很多话题都在谈论父/子方法调用和继承,但没有一个确切地谈到这个问题。

有人可以帮助我吗?

谢谢。

您需要通过引用传递对象或传递指针

void operation(A& a)

由于您是按值传递的,因此派生对象将被切片 - 在函数范围内创建一个类型为 A 的新对象。