【发布时间】:2014-02-07 10:58:12
【问题描述】:
在我的代码中,我实现了这些类:
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的默认c'tor,而是声明一个函数b,它不接受任何参数并返回一个类B的对象。 -
这只是我写这个简化代码示例时犯的一个错误
标签: c++ inheritance