C++ : Calling a child method from parent instantiation

标签 c++ inheritance

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

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

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

还有这些函数:

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

int main()
{
  B b;
  operation(b);
  return 0;
}

可以看到,B类继承了A类,并实现了虚继承方法fun()。主类调用一个以 A 为参数的函数,并调用 fun() 方法,参数为 B 对象。

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

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

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

有人可以帮助我吗?

谢谢。

最佳答案

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

void operation(A& a)

因为您是按值传递,所以派生对象被切片 - 在函数范围内创建类型为 A 的新对象。

关于C++ : Calling a child method from parent instantiation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625928/

相关文章:

c++ - 虚拟继承对构造函数的影响

Java:继承和数组,以及它们的 child

Java继承编译

c++ - 在工作完成后立即删除 boost::thread 对象的最佳方法是什么?

模板类的 C++ typedef

c++ - 比较是否意味着分支?

c++ - 这段 C++ CRTP 代码应该编译吗?如果可以,它应该做什么?

java - 如何将客户更改为不同的成员(member)资格? java

c++ - 将不同组中的 C++ 文件包含到 Objective-C++ 测试中

c++ - POSIX 线程在 C 中没有产生加速