ホームページ  >  記事  >  バックエンド開発  >  C の派生クラスで基本クラスのコンストラクターと代入演算子を使用するにはどうすればよいですか?

C の派生クラスで基本クラスのコンストラクターと代入演算子を使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 08:33:02160ブラウズ

How do I use Base Class Constructors and Assignment Operators in Derived Classes in C  ?

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

オブジェクト指向プログラミングでは、継承によりクラスが基本クラスのプロパティとメソッドを継承できます。この強力な機能により、コードの再利用と保守性が向上します。ただし、継承されたクラスでコンストラクターと代入演算子を処理するのは難しい場合があります。

一連のコンストラクターと代入演算子を持つクラス B を考えてみましょう。目標は、foo() をオーバーライドし、B のコンストラクターと代入演算子を保持する継承クラス D を作成することです。

明示的な呼び出し

これを実現する 1 つの方法は、コンストラクターと代入演算子を明示的に呼び出すことです。これには、D のインスタンスの作成時に適切な基本クラス コンストラクターを手動で呼び出し、Base::operator=() を使用して代入演算子に値を割り当てることが含まれます。

<code class="cpp">class Base {
  // ...
public:
  Base(const Base&) { /*...*/ }
  Base& operator=(const Base&) { /*...*/ }
};

class Derived : public Base {
  int additional_;
public:
  Derived(const Derived& d)
    : Base(d) // dispatch to base copy constructor
    , additional_(d.additional_)
  {
  }

  Derived& operator=(const Derived& d)
  {
    Base::operator=(d);
    additional_ = d.additional_;
    return *this;
  }
};</code>

暗黙的な使用法

興味深いことに、コンストラクターや代入演算子を明示的に定義しなくても、コンパイラーがそれらを自動的に生成する場合があります。これは、直接的な継承と最小限のカスタマイズを備えたクラスの場合です。

<code class="cpp">class ImplicitBase { 
  int value_; 
  // No operator=() defined
};

class Derived : public ImplicitBase {
  const char* name_;
public:
  Derived& operator=(const Derived& d)
  {
    ImplicitBase::operator=(d); // Call compiler generated operator=
    name_ = strdup(d.name_);
    return *this;
  }
};  </code>

したがって、コンストラクターと代入演算子の包括的なセットを提供する基本クラスから継承する場合、それらをこれらの関数に追加の機能が必要ない限り、派生クラスを書き直す必要はありません。

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

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