2012-04-16 6 views
5

をチェーンC++多重継承とコンストラクタはfooとバズ、すなわちから継承するクラスワルドを、考えてみましょう:これは機能しますか?

class Waldo : public Foo, public Baz { 
    ... 
}; 

私はワルドの新しいインスタンスを作成する場合:

Waldo *w = new Waldo; 

はFooの操作を行うと、 Bazのコンストラクタが呼び出されますか?デフォルトで呼び出されていない場合は、Waldoコンストラクタの宣言または宣言で簡単に呼び出すことができますか?

は(私はコンストラクタチェーンをやろうとすることができる、およびC++は、伝えられるところでそれをしていないように見えます。私はよく分からない。)

私は何をしようとしていることは、さまざまなクラスは、「注釈を付ける」ですアノテーションがアノテーションされたクラスのインスタンスを、アノテーションクラスによって維持されるリストにリンクさせる(他のものの中でも)。これは、例えば、Baz-natureを持つすべてのオブジェクトのリストを歩き、特定の操作を適用し、Baz-natureを持つオブジェクトのリストにインスタンスを追加することを覚えていたかどうかを心配する必要はありません。コンストラクタは自動的にそれを行いました。

+1

注:ここでは 'new'の使用は偽であり、' Waldo w; 'と'Waldo'が作られるでしょう。 –

答えて

1

クラスのすべてのメンバーのコンストラクタは、クラスで宣言された順に呼び出されます。

派生クラスのデフォルトコンストラクタは、デフォルトでベースクラスのコンストラクタを呼び出します。引数が必要な場合は、明示的に呼び出す必要があります。それ以外の場合はエラーとなります。

class Employee { 
private: 
    // 
public: 
    Employee(); 
    //... 
}; 



class Manager: public Employee { 
private: 
    short level; 
public: 
    Manager(): Employee(), level() {} // This is the default constructor, it calls Employee(). 
    // The definition is equivalent to default constructor of Manager.. 
    //... 
    }; 
+0

良い、詳細な答えと説明。ありがとうございました! –

7

はい、呼び出されます。左から右へ。

関連する問題