1

ひし形の問題を解決するために、仮想継承を使用します。

class A {}
class B : virtual Public A {}
class C : virtual Public A {}
class D : public B, Public C {}

なぜ次のように定義されていないのですか:

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

2番目のものではなく、C++でダイヤモンドの問題を解決する既存のソリューションを持つ背後にある技術的な理由は何ですか? 派生クラスの問題を解決するために基本クラスの継承を変更するのは面倒ではありませんか。

誰かが技術的な複雑さを提供できれば、それは素晴らしいことです。ありがとう。

4

1 に答える 1

0

これはここで回答されています:-

あなたが望む:(仮想継承で達成可能)

   D
  / \
 B   C
  \ /
   A

そうではありません:(仮想継承なしで何が起こるか)

    D
   / \
  B   C
  |   |
  A   A
于 2013-08-21T18:46:54.110 に答える