ホームページ > バックエンド開発 > C++ > 派生クラスは基本クラスのコンストラクターと代入演算子をどのように利用できますか?

派生クラスは基本クラスのコンストラクターと代入演算子をどのように利用できますか?

Mary-Kate Olsen
リリース: 2024-11-03 14:31:02
オリジナル
946 人が閲覧しました

How Can Derived Classes Leverage Base Class Constructors and Assignment Operators?

派生クラスでの基本クラス コンストラクターと代入演算子の使用

C では、継承により派生クラスが基本クラスの特定の機能を継承できます。ただし、派生クラスが基本クラスと同じコンストラクターと代入演算子のセットを必要とする場合は、派生クラスでこれらの関数を書き直すことが必要になる場合があります。これは、特にプライベート メンバー変数へのアクセスが必要な代入演算子の場合、面倒な作業になる可能性があります。

幸いなことに、別の解決策があります。派生クラスは、基本クラスのコンストラクターと代入演算子を明示的に呼び出すことができます。この手法により、既存の実装を書き直すことなく利用できるようになります。

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

<code class="cpp">class Base {
public:
    Base();
    Base(const string& s);
    Base(const Base& b) { (*this) = b; }
    Base& operator=(const Base & b);

private:
    // ... (private member variables and functions)
};

class Derived : public Base {
public:
    // Override the "foo" function without modifying other aspects of the base class
    virtual void foo() override;
};</code>
ログイン後にコピー

この例では、Derived は Base のコンストラクターと代入演算子を継承します。これらの関数を明示的に定義する必要はありません。代わりに、Derived オブジェクトを構築するとき、または Base オブジェクトを Derived オブジェクトに代入するときに、コンパイラは適切な基本クラス コンストラクターまたは代入演算子を自動的に呼び出します。

代入演算子にも同じ戦略を使用できます。

<code class="cpp">class Base {
public:
    // ... (private member variables and functions)
    Base(const Base& b) { /* ... */ }
    Base& operator=(const Base& b) { /* ... */ }
};

class Derived : public Base {
public:
    int additional_;

    // Call the base assignment operator within the derived operator
    Derived& operator=(const Derived& d) {
        Base::operator=(d);
        additional_ = d.additional_;
        return *this;
    }
};</code>
ログイン後にコピー

この手法により、派生クラスは、必要な動作をオーバーライドまたは追加するだけで、基本クラスの機能を完全に利用できるようになります。複雑な基本クラスのコンストラクターや代入演算子を書き直す必要がなくなるため、継承が簡素化されます。

以上が派生クラスは基本クラスのコンストラクターと代入演算子をどのように利用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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