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

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

Mary-Kate Olsen
リリース: 2024-12-06 08:32:10
オリジナル
873 人が閲覧しました

How Should Base Class Member Variables Be Initialized in a Derived Class Constructor?

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

オブジェクト指向プログラミングでは、クラス間に継承関係があるのが一般的です。派生クラスを構築するときは、基本クラスから継承したメンバー変数を適切に初期化することが重要です。ただし、派生クラスのコンストラクターで基本クラスのメンバーを直接初期化しようとすると、エラーが発生する可能性があります。

次のコード例を検討してください。

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

class B : public A
{
public:
    B() : A(), a(0), b(0)
    {
    }
};
ログイン後にコピー

このコードをコンパイルしようとすると、次の結果が得られます。派生クラスのコンストラクターは基本クラスのメンバーを直接初期化できないため、エラーが発生します。これは、基本クラスのメンバーが派生クラスからアクセスできないためです。

この問題を解決するには、派生クラスが継承されたメンバーを初期化できるようにするコンストラクターを基本クラスに作成する必要があります。次の変更されたコードは、このアプローチを示しています。

class A
{
protected:
    A(int a, int b) : a(a), b(b) {}
private:
    int a, b;
};

class B : public A
{
public:
    B() : A(0, 0)
    {
    }
};
ログイン後にコピー

これで、派生クラス B は、基本クラス A のコンストラクターを呼び出すことによって、継承されたメンバー a と b を初期化できます。 A のコンストラクターを保護されたものとして宣言することで、派生クラスにはアクセスできますが、継承階層の外側にある他のクラスにはアクセスできません。あるいは、A コンストラクターをパブリックとして宣言して、外部インスタンス化を許可することもできます。

このアプローチを使用すると、カプセル化を維持し、クラスの外部からプライベート変数への直接アクセスを防ぎながら、継承されたメンバーの適切な初期化を保証できます。

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

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