2

わかりましたので、すべてのクラスを完全に制御できる場合に死のダイヤモンドの継承の問題を解決する方法を理解していますが、両方から継承する最後のクラスのみを制御できる場合はどうなるでしょうか。

class A {};
class B : public A {};
class C : public A {};
class D : public B, public C {};

また、B と C を編集する方法がなく、D のみを編集できます。これを行う簡単な方法はありますか?

4

2 に答える 2

3

Bこれは、強制しCて共有することができない非常に正当な理由ですA。検討:

struct A {int i;};
struct B : A {
 B(){i=3;}
 void foo() {
  //crash if i!=3
 }
};
struct C : A {
 C(){i=4;}
 void bar() {
  //crash if i!=4
 }
};

BそしてC良いクラスです。彼らは、自分が入り込めない状況に対処できません (i の値が無効です)。

あなたが求めていること ( struct D:B,C、 where B、およびCshare A) を実行する方法があった場合、 の値はどうなりますD::A::iか?

仮想継承とは、「このクラスが必要ですが、有効な値は必要ありません。他の誰かがそれをいじっても完全に問題ありません」という意味です。

于 2013-06-07T15:52:50.010 に答える