タグ付けされた質問 「diamond-problem」

16
Java多重継承
Javaの多重継承問題を解決する方法を完全に理解するために、私は明確にする必要のある古典的な質問をします。 私はクラスを持っているとしましょうAnimal、これはサブクラスを持っているBirdとHorse、私はクラスにする必要があるPegasusから延びBirdかつHorse以来、Pegasus鳥と馬の両方です。 これは古典的なダイヤモンドの問題だと思います。これを解決する古典的な方法を私が理解できることからAnimal、BirdとHorseクラスをインターフェイスにしてPegasus、それらから実装することができます。 まだ鳥や馬のオブジェクトを作成できるという問題を解決する別の方法があるのか​​と思っていました。動物を作成できる方法があれば、それも素晴らしいことですが、必須ではありません。

5
仮想継承はどのようにして「ダイヤモンド」(多重継承)のあいまいさを解決しますか?
class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a = new D(); a->eat(); } ダイヤモンドの問題を理解しています。上記のコードにはその問題はありません。 …

2
Derived1 :: BaseとDerived2 :: Baseは同じ型を参照していますか?
MSVC、Clang、およびGCCはこのコードに同意しません。 struct Base { int x; }; struct Der1 : public Base {}; struct Der2 : public Base {}; struct AllDer : public Der1, public Der2 { void foo() { Der1::Base::x = 5; } }; ゴッドボルト GCC: <source>: In member function 'void AllDer::foo()': <source>:10:21: error: 'Base' is an ambiguous base …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.