タグ付けされた質問 「multiple-inheritance」

クラスが複数のスーパークラスまたは基本クラスから動作と機能を継承できる、一部のオブジェクト指向コンピュータープログラミング言語の機能。

8
JDK 8のデフォルトは、Javaの多重継承の一形態ですか?
JDK 8の新機能により、バイナリ互換性を維持しながら既存のインターフェースに追加できます。 構文は次のようなものです public interface SomeInterface() { void existingInterface(); void newInterface() default SomeClass.defaultImplementation; } このようにしてSomeInterface、この新しいバージョンにアップグレードするときの既存のすべての実装で、突然コンパイルエラーが発生することはありませんnewInterface()。 これは素晴らしいことですが、実装しなかった新しいデフォルトのメソッドを両方とも追加した2つのインターフェイスを実装するとどうなりますか?例を挙げて説明しましょう。 public interface Attendance { boolean present() default DefaultAttendance.present; } public interface Timeline { boolean present() default DefaultTimeline.present; } public class TimeTravelingStudent implements Attendance, Timeline { } // which code gets called? new TimeTravelingStudent().present(); これはJDK8の一部として定義されていますか? …

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 …

3
enable_shared_from_thisを最初の基本クラスにする必要がありますか?
私のクラスは複数のベースから継承していますが、そのうちの1つはですstd::enable_shared_from_this。一塁でなければならないのですか? 次のコード例を考えてみます。 struct A { ~A(); }; struct B { ~B(); }; struct C : A, B, std::enable_shared_from_this<C> {}; std::make_shared<C>(); 実行する~A()と~B()、C住んでいたストレージがまだ存在していることを確認できますか?


2
多重継承は、疑わしいあいまいな仮想関数の過負荷につながります
この例では、クラスFooとBarはライブラリから提供されています。私のクラスBazは両方から継承します。 struct Foo { void do_stuff (int, int); }; struct Bar { virtual void do_stuff (float) = 0; }; struct Baz : public Foo, public Bar { void func () { do_stuff (1.1f); // ERROR HERE } }; struct BazImpl : public Baz { void do_stuff (float) override {}; }; …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.