web-dev-qa-db-ja.com

派生クラスオブジェクトの作成中にパラメーターを基本クラスコンストラクターに渡す

ABの2つのクラスを考えます

class A
{
public:
    A(int);
    ~A();
};

class B : public A
{
public:
    B(int);
    ~B();
};


int main()
{
    A* aobj;
    B* bobj = new bobj(5);    
}

クラスBAを継承します。

Bのオブジェクトを作成したい。派生クラスオブジェクトを作成すると、基本クラスコンストラクターも呼び出されますが、これはパラメーターのないデフォルトコンストラクターです。

私が望んでいるのは、Bがパラメーター(5など)を取り、Aのコンストラクターに渡すことです。この概念を示すためにいくつかのコードを示してください。

21
CodeCrusader

基本メンバーの初期化を使用します。

class B : public A
{
public:
    B(int a) : A(a)
    {
    }
    ~B();
};
32
Bathsheba
B::B(int x):A(x)
{
    //Body of B constructor
}
12

引数を基本クラスに渡すためだけに派生クラスコンストラクターを使用している場合は、C++ 11でより短い方法でそれを行うこともできます。

class B : public A
{
    using A::A;
};

その前に「パブリック」アクセス指定子さえ使用していないことに注意してください。継承されたコンストラクタは基本クラスと同じアクセスレベルで暗黙的に宣言されるため、これは必要ありません。

詳細については、セクションInheriting constructorsを参照してください: https://en.cppreference.com/w/cpp/language/ using_declaration

また、 https://softwareengineering.stackexchange.com/a/307648 を参照して、コンストラクター継承の制限を理解することもできます。

3
Mandeep Singh

クラスA {public:int aval;

A(int a):aval(a){};
~A();

};

クラスB:パブリックA {public:int bval;

B(int a,int b):bval(a),A(b){};
~B();

};

int main(){

  B *bobj = new bobj(5,6);
//or 
  A *aobj=new bobj(5,6); 

}

この場合、基本クラスと派生クラスの値を割り当てています。

0
Wilson