仮想継承中のC ++コンストラクターの順序

motis10
class Animal {
public:
    Animal(const char * color, int childs, float avgLifetime) {
        //Do something
    }
};

class Birds: virtual public Animal {
public:
    Birds(const char * color, int childs, float avgLifetime, float incubation)
    : Animal(color, childs, avgLifetime) {
        //Do something
    }
};

class Flamingo: public Birds {
public:
    Flamingo(const char * color, int childs, float avgLifetime, float incubation, float avgHeight)
    : Animal(color, childs, avgLifetime),
      Birds(color, childs, avgLifetime, incubation) {
        //Do something
    }
};

新しいものFlamingo作成しようとすると、Animalコンストラクターをスキップしました。その相続人が仮想
だからだと思いBirdsますAnimal

私はそれが順番に到着すると思いました:

Animal->Birds->Flamingo  

なぜAnimalコンストラクターをスキップするのですか?

jxh

Birds仮想継承を使用するためAnimal、の派生はBirdsで仮想継承も使用しAnimalます。特に:

class Flamingo : public Birds { /* ... */ };

暗黙的に次と同等です:

class Flamingo : virtual Animal, public Birds { /* ... */ };

また、明示的に記述した場合はFlamingo、コンストラクターを呼び出すためのコードを追加することを期待していましたAnimal(または、のデフォルトコンストラクターFlamingoを暗黙的に呼び出すことができAnimalます)。さらに、インスタンスのFlamingo's初期化は'をAnimalオーバーライドしますBirds

だから、初期化はまだですAnimalBirdsFlamingoが、Animal初期化は何でもありFlamingoません、そしてBirds以来、初期化はスキップされ「Animalすでに初期化されています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

仮想継承コンストラクターの順序

分類Dev

C ++仮想継承の回避

分類Dev

C ++の複数の仮想継承

分類Dev

C ++の純粋仮想多重継承?

分類Dev

C#での仮想継承

分類Dev

c ++仮想継承の違い

分類Dev

C ++の継承と仮想関数

分類Dev

仮想継承コンストラクターの選択

分類Dev

仮想デストラクタなしのC ++継承

分類Dev

複数の仮想継承

分類Dev

仮想継承なしの多重継承

分類Dev

コンストラクターと仮想基本クラスの継承

分類Dev

仮想継承の使用中に呼び出されるデフォルトのコンストラクター

分類Dev

C ++仮想継承とコンストラクタ

分類Dev

Javaコンストラクター-継承階層での実行順序

分類Dev

Scala:継承におけるコンストラクターの順序

分類Dev

コンストラクターに対する仮想継承の影響

分類Dev

基本クラスの仮想継承と非仮想継承の混在

分類Dev

基本クラスの仮想継承と非仮想継承の混在

分類Dev

仮想継承でのCRTPの使用

分類Dev

仮想関数を使用したC ++での多重継承

分類Dev

C ++仮想継承のあいまいな使用法

分類Dev

Dartコンストラクターの初期化順序

分類Dev

コンストラクターの順序付け

分類Dev

非仮想多重継承の例

分類Dev

C ++継承の仮想クラスメンバーのコード重複を削除します

分類Dev

C ++仮想継承、仮想デストラクタ、およびdynamic_cast <void *>

分類Dev

DLLからの仮想クラスインターフェイスの継承(C ++)

分類Dev

Javaのマルチレベル継承でのコンストラクター呼び出しの順序

Related 関連記事

ホットタグ

アーカイブ