はおそらく最良の例で説明した:複数の仮想継承の曖昧
struct A
{
virtual void foo() = 0;
};
struct B
{
virtual void foo() = 0;
};
struct C : A, B
{
// Implementation of A::foo
void A::foo();
// Implementation of B::foo
void B::foo();
};
// Define here; howto?
私はそれが実装するために約6基底クラスがあります(この例では現実的ではないのですが、私はクラスでインライン関数を定義することができます承知していますすべて40 +メソッドあり)
-
どうやら明確ではありませんでした。疑問は直接です:どのようにあいまいさの問題を引き起こすことなく継承されている両方のfoo()メソッドを定義するのですか?
次は確かに
void C::foo() { /* etc */ }
これは:: FOO(の実装を定義します)まだBの何:: FOOを()に動作しますか?
- 念頭に、私はC.
PSの宣言内にメソッドを定義したくない、まったくこの方法で問題をモデル化するための理由は
(COM/OLE)あらかじめ定義されています予想通り
struct A { virtual int foo() = 0; };
struct B { virtual int foo() = 0; };
struct C : A, B
{
int A::foo() { return 1; }
int B::foo() { return 2; }
};
void main()
{
C* p = new C();
cout << ((A*) p)->foo();
cout << ((B*) p)->foo();
}
質問がありますか? –
この例では仮想継承を持っていません。仮想関数を持つクラスを複数継承しています。 – Mat
問題はなんですか? – ScarletAmaranth