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

Vul*_*rao 6 c++ inheritance

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

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

class B : public A
{
  public:
    virtual int fun() { return 1; }
}
Run Code Online (Sandbox Code Playgroud)

而这些功能:

void operation(A a)
{
  printf("%d\n",a.fun());
}

int main()
{
  B b;
  operation(b);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

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

我需要这样做,因为我有几个B类(B1,B2等...),我希望该函数operation()是通用的.我不需要operation()在类A中实现,但如果我声明operation()纯虚拟,则编译失败operation()说我无法实例化A(这是非常期待的).

我发现很多话题都讨论了父/子方法调用和继承,但没有一个人准确地讨论过这个问题.

有人能帮我吗 ?

谢谢.

Luc*_*ore 10

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

void operation(A& a)
Run Code Online (Sandbox Code Playgroud)

因为您正在传递值,所以派生对象会被切片 - A在函数范围内创建一个新的类型对象.