A
とB
の2つのクラスを考えます
class A
{
public:
A(int);
~A();
};
class B : public A
{
public:
B(int);
~B();
};
int main()
{
A* aobj;
B* bobj = new bobj(5);
}
クラスB
はA
を継承します。
B
のオブジェクトを作成したい。派生クラスオブジェクトを作成すると、基本クラスコンストラクターも呼び出されますが、これはパラメーターのないデフォルトコンストラクターです。
私が望んでいるのは、B
がパラメーター(5など)を取り、A
のコンストラクターに渡すことです。この概念を示すためにいくつかのコードを示してください。
基本メンバーの初期化を使用します。
class B : public A
{
public:
B(int a) : A(a)
{
}
~B();
};
B::B(int x):A(x)
{
//Body of B constructor
}
引数を基本クラスに渡すためだけに派生クラスコンストラクターを使用している場合は、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 を参照して、コンストラクター継承の制限を理解することもできます。
クラス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);
}
この場合、基本クラスと派生クラスの値を割り当てています。