ホームページ >バックエンド開発 >C++ >派生クラス コンストラクターで基本クラスのメンバー変数を適切に初期化するにはどうすればよいですか?

派生クラス コンストラクターで基本クラスのメンバー変数を適切に初期化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 21:54:12260ブラウズ

How to Properly Initialize Base Class Member Variables in a Derived Class Constructor?

派生クラス コンストラクターでの基本クラスのメンバー変数の初期化

クラスの継承を使用する場合、基本クラスをどのように初期化するかという一般的な疑問が生じます。派生クラスのコンストラクター内のメンバー変数。最初にそうしようとすると、以下に示すように混乱が生じる可能性があります:

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

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

このコードはコンパイルに失敗し、疑問が生じます: なぜ B で a と b を初期化できないのですか?

その理由は、a と b が B のメンバーではないという事実にあります。これらは基本クラス A に属します。A だけが独自のメンバー変数を初期化できます。

One考えられる解決策は、a と b を A のパブリック メンバーにして、B が値を直接割り当てられるようにすることです。ただし、これはカプセル化の原則に違反するためお勧めできません。

代わりに、より堅牢なアプローチは、派生クラスが初期化値を指定できるようにする A でコンストラクターを定義することです。これは、コンストラクターを保護し、サブクラスにアクセスできるようにすることで実現できます。

class A {
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
private:
    int a, b; // Keep variables private within A
};

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

このソリューションにより、a と b が A 内で正しく初期化され、データの整合性とカプセル化が保証されます。

以上が派生クラス コンストラクターで基本クラスのメンバー変数を適切に初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。