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

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

Patricia Arquette
リリース: 2024-12-06 08:09:13
オリジナル
394 人が閲覧しました

How Can I Properly Initialize Base Class Member Variables from a Derived Class Constructor?

メンバー変数の初期化に継承を利用する

オブジェクト指向プログラミングでは、派生クラスのコンストラクター内で基本クラスのメンバー変数を初期化することが一般的なタスクです。ただし、特定のシナリオではこの初期化が妨げられる場合があります。そのようなシナリオの 1 つと推奨される解決策を見てみましょう。

次のコード スニペットを考えてみましょう:

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

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

};
ログイン後にコピー

ここで、プログラムは、基本クラス A のメンバー変数 a と b を初期化しようとします。派生クラス B のコンストラクター。ただし、このアプローチはコンパイル エラーで失敗します。

このエラーの理由は、a と b が次のとおりであるという事実にあります。 B のメンバーではありません。これらは基本クラス A のメンバーです。したがって、A のコンストラクターのみがそれらを初期化する権限を持ちます。

派生クラスのコンストラクターで a と b を直接初期化する代わりに、a と b をより効率的に初期化できます。解決策は、それらを基本クラスの保護されたメンバーとして宣言し、基本クラス内のコンストラクターを初期化に利用することです。このアプローチにより、派生クラスは継承を通じてこれらの変数にアクセスし、初期化できるようになります。

この改善されたアプローチを示す改訂されたコード スニペットを次に示します。

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.
    {
    } 
};
ログイン後にコピー

この改訂されたコードでは、ベースのコンストラクターがクラス A は 2 つの整数引数を受け取り、それに応じてメンバー変数 a と b を初期化します。派生クラス B は、A の保護されたコンストラクターを継承し、それを独自のコンストラクター内で呼び出して、a と b をデフォルト値 0 で初期化します。

このアプローチにより、カプセル化を維持しながらメンバー変数の適切な初期化が保証され、オブジェクト指向プログラミングの原則。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート