1. ホーム
  2. c++

[解決済み] 派生クラスのコンストラクタでベースクラスのメンバ変数を初期化するにはどうすればよいですか?

2022-04-27 07:11:10

質問

なぜできないのでしょうか?

class A
{
public:
    int a, b;
};

class B : public A
{
    B() : A(), a(0), b(0)
    {
    }

};

解決方法は?

を初期化することはできません。 abB のメンバーではないので B . のメンバーです。 A のみであり、したがって A は初期化することができます。それらを公開し、そして B しかし、それはカプセル化を破壊することになるので、推奨されるオプションではありません。代わりに、コンストラクタを A を許可する B (のサブクラス)。 A ) を使って初期化します。

class A 
{
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
    // Change "protected" to "public" to allow others to instantiate A.
private:
    int a, b; // Keep these variables private in A
};

class B : public A 
{
public:
    B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0.
    {
    } 
};