在我的代码中,我已经实现了以下这些类:
而这些功能:
如您所见,类B继承自A,并实现了虚拟继承方法
执行时,我期望字符串
我需要这样做是因为我有几个B类(B1、B2等),我希望函数
我找到了很多关于父/子方法调用和继承的话题,但没有一个确切地讨论这个问题。
有人能帮帮我吗?
谢谢。
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"
(即使是传递给operation()
的B对象)。我需要这样做是因为我有几个B类(B1、B2等),我希望函数
operation()
是通用的。我不需要在类A中实现operation()
,但如果我声明operation()
为纯虚拟的,则编译会在operation()
处失败,说我不能实例化A(这是可以预料的)。我找到了很多关于父/子方法调用和继承的话题,但没有一个确切地讨论这个问题。
有人能帮帮我吗?
谢谢。
B b()
不会调用B
的默认构造函数,而是声明了一个名为b
的函数,该函数不带参数并返回类B
的对象。 - Johannes S.