【发布时间】:2013-09-17 17:05:17
【问题描述】:
C++ 中的多重继承问题:
看起来像钻石问题,但事实并非如此。不能通过添加虚拟继承来解决。
struct A {
virtual void f() { cout << "A::f()" << endl; };
};
struct B : public virtual A {
void f() { cout << "B::f()" << endl;};
};
struct C : public virtual A {
void f() { cout << "C::f()" << endl;};
};
struct D : B, C { };
int main() {
D d;
B* bp = &d;
A* ap = bp;
D* dp = &d;
ap->f();
dp->f(); // compile error here because D has two candidates f() to override.
// error: request for member f is ambiguous
// error: candidates are: virtual void C::f()
// error: virtual void B::f()
}
我说的对吗?
【问题讨论】:
-
钻石通常不是“问题”,而是解决方案...
-
如果你画的时候看起来不像钻石,那是因为你画的不对……它是钻石!
标签: c++ inheritance multiple-inheritance diamond-problem