在我的代码中,我实现了这些类:
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/