3
考虑下面的代码定义函数。 这种情况如何解决? 这个问题看起来类似钻石继承,但我看不到解决方案。派生类通过基类
编辑:谢谢,这是工作示例:
#include "stdio.h"
struct A
{
virtual void f() = 0;
};
struct B
{
void f()
{
printf("B::f\n");
}
};
struct C : public A, public B
{
void f()
{
printf("C::f\n");
B::f();
}
};
int main()
{
A* a = new C();
B* b = new C();
C* c = new C();
printf("Calling from A\n");
a->f();
printf("Calling from B\n");
b->f();
printf("Calling from C\n");
c->f();
}
输出:
Calling from A
C::f
B::f
Calling from B
B::f
Calling from C
C::f
B::f
只是想了解你的意图:你想'A'定义一个接口,'B'定义的实现和'C'把它们放在一起?我没有看到'B:A'的优点,因为在实现'B'时,你已经知道你正在实现的接口,对吗? – leemes
我不能简单地让'B'从'A'派生出来,因为这只是我在一个更大的项目中遇到的问题的一个孤立的例子。 –