0

言語 : C/C++
問題 : 一般的な例を挙げると、

  • Aは親クラスです。
  • BCはどちらもクラスAから継承されています。
  • DはBCの両方から継承されます

Dのオブジェクトを介してAの関数にアクセスしたい

注: これは仮想継承です。したがって、 A のオブジェクトは 1 つしかないことがわかります。

問題は、 BまたはCが最初に作成するオブジェクトはどれかということです。

ヒエラルキーを意識する

   A
 /   \
B     C
 \   /
   D
4

3 に答える 3

0

つまり、OO 自体にはこれに関する保証はありません。

特定の実装または言語について話している場合(ただし、質問はそうではありません)、これに関する保証があるかもしれません。

于 2012-08-03T11:52:59.360 に答える
0

ええ、この問題は、死のダイヤモンドとしてアポストロフィされることもあります。

残念ながら、あなたの質問には答えられません。それは、あなたがプログラミングしている現在の言語に基づいています.

たとえば、Scala (トレイトに複数の継承が許可されている) では、線形化アルゴリズムに沿ったインスタンス化のための非常に厳格な規則があり、適切な詳細を見つけることができます。

あなたはC++で遊んでいると思います。それが正しい場合は、 C++ FAQの適切なセクションを参照してください(問題はそこにも記載されています)。

于 2012-08-03T11:54:23.523 に答える
0

C++ とクラスのインスタンス化の順序について話している場合、それは宣言の継承順序に依存します。

だから、

class D :  public B,public C

B が最初にインスタンス化され、次に C がインスタンス化されます。

class D :  public C,public B

C が最初にインスタンス化され、次に B がインスタンス化されます。

于 2012-08-03T12:02:34.137 に答える