在我的代码中,我实现了这些类:
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 in参数并调用fun()方法,并在参数中使用B对象.
在执行时,我希望打印字符串“1”,但它是“0”(即使它是传递给operation()的B对象).
我需要这样做,因为我有几个B类(B1,B2等…),我希望函数operation()是通用的.
我不需要在类A中实现operation(),但是如果我声明operation()是纯虚拟的,那么编译会在operation()失败,说我无法实例化A(这是非常期待的).
我发现很多话题都讨论了父/子方法调用和继承,但没有一个人准确地讨论过这个问题.
有人能帮我吗 ?
谢谢.
解决方法
您需要通过引用传递对象或传递指针
void operation(A& a)
因为您正在传递值,所以派生对象会被切片 – 在函数范围内创建一个类型为A的新对象.