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

基本クラスのメンバー変数は派生クラスのコンストラクターでどのように初期化されるべきですか?

Susan Sarandon
リリース: 2024-12-05 04:20:10
オリジナル
465 人が閲覧しました

How Should Base Class Member Variables Be Initialized in Derived Class Constructors?

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

オブジェクト指向プログラミングでは、継承により派生クラスがプロパティと動作を継承できるようになります。基本クラス。ただし、派生クラス コンストラクター内で基本クラスのメンバー変数を初期化すると、問題が発生する場合があります。

なぜ派生クラス コンストラクターで基本クラスのメンバー変数を初期化できないのですか?

次の例を考えてみましょう:

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

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

};
ログイン後にコピー

このコードでは、クラス B がベースを初期化しようとします。構文 A()、a(0)、b(0) を使用して、クラス メンバー変数 a および b を独自のコンストラクター内で使用します。ただし、このアプローチは間違っています。その理由は、a と b はクラス B のメンバーではなく、クラス A のメンバーであるためです。これらの変数を直接初期化できるのはクラス A だけです。

初期化のベスト プラクティス

この問題に対処するために、推奨されるアプローチがいくつかあります。

  • 基本クラスのメンバーを作成するPublic: 1 つのアプローチは、以下に示すように、基本クラスのメンバー変数をパブリックにすることです。
class A
{
public:
    int a, b;
};

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

};
ログイン後にコピー

ただし、メンバー変数をパブリックにすることは、原則に違反するためお勧めできません。カプセル化とセキュリティ。

  • の基本クラス コンストラクターを作成します。初期化: より安全で推奨されるアプローチは、派生クラスが基本クラスのメンバー変数を初期化できるようにするコンストラクターを基本クラスに作成することです。例:
class A 
{
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
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.
    {
    } 
};
ログイン後にコピー

このアプローチにより、派生クラスは、必要な初期値を使用して基本クラスのコンストラクターを呼び出すことで、基本クラスのメンバー変数を初期化できます。

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

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