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()
}
私は正しいですか?