3

これは、基本クラスのコンストラクターを呼び出す正当な方法ですか?

基本クラスは次のとおりです

class base_class
{
    public:
    base_class(int x, int y);    
    protected:
    int a;
    int b;
};

base_class::base_class(int x,int y)
{
    a=x;
    b=y;
}

派生クラスは次のとおりです

class derived_class: public base_class
{
    public:
    derived_class(int x,int y,int z);
    protected:
    int c;
};
derived_class:: derived_class(int x,int y,int z):base_class(x,y)  /*Edited and included the scope resolution operator*/
{
    c=z;
}

派生クラス コンストラクターを定義するこの方法は C++ で有効ですか? はいの場合、基本クラス コンストラクターはどのように呼び出されますか?

4

3 に答える 3

6

あなたが意味したと仮定して

derived_class::derived_class(int x,int y,int z):base_class(x,y)   
//            |
//     scope resolution operator

はい。これ正当な方法であるだけでなく、現在のオブジェクトの基本コンストラクターを明示的に呼び出す唯一の方法です。

これを行わない限り、既定のコンストラクターが暗黙的に呼び出されます。あなたの場合、基本クラスにはデフォルトのコンストラクターがないため、コンパイラ エラーが発生します。

于 2012-11-28T19:35:18.460 に答える
3

デフォルト以外のコンストラクターを呼び出す場合、これは基本クラスを初期化する正しい (そして唯一の) 方法です。もちろん、スコープ解決演算子に 2 番目のコロンを追加する場合です。

次のように、「初期化子リスト」(コロンと関数本体の間のセクション) ですべてのメンバーを初期化するのがより一般的です。

derived_class::derived_class(int x,int y,int z):
    base_class(x, y),
    c(z)
{
}

... where はc(z)、あなたint cを の値に初期化しますz

于 2012-11-28T19:36:41.653 に答える
0

はい、それは正しい方法であり、派生クラスの前に基本クラスのコンストラクターを呼び出す唯一の方法です。

于 2012-11-28T19:35:35.583 に答える