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

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

DDD
DDDオリジナル
2024-11-01 05:46:02673ブラウズ

How do I leverage Base Class's constructors and assignment operator in C  ?

C で基本クラスのコンストラクターと代入演算子を活用する方法

C では、継承クラスは以下を含む基本クラスの動作を継承できます。コンストラクターと代入演算子。一連のコンストラクターと代入演算子を備えた基本クラス B を考えてみましょう。

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

次に、同じコンストラクター セットを継承しながら foo() 関数をオーバーライドする派生クラス D を作成したいとします。コピー コンストラクターと代入演算子。ただし、重複を避けるために、B の既存のコンストラクターと演算子を使用する必要があります。

明示的な呼び出し:

基本クラスのコンストラクターと代入演算子を明示的に呼び出すことができます。派生クラスのコンストラクターと代入演算子内でそれぞれ。これにより、基本クラスのメンバー変数が適切に初期化されることが保証されます。

<code class="cpp">class D : public B {
 public:
  D(const D& d) : B(d), additional_(d.additional_) {}
  D& operator=(const D& d) {
    B::operator=(d);
    additional_ = d.additional_;
    return *this;
  }
 private:
  int additional_;
};</code>

暗黙的呼び出し:

興味深いことに、コピー コンストラクターを明示的に定義していなくても、派生クラスの代入演算子を使用すると、コンパイラはデフォルトのバージョンを生成します。これらのデフォルト バージョンは、基本クラスのコピー コンストラクターと代入演算子をそれぞれ暗黙的に呼び出します。

たとえば、次の基本クラスの場合:

<code class="cpp">class ImplicitBase {
  int value_;
};</code>

次の派生クラスの代入演算子は、暗黙的に基本クラスを呼び出します。クラスの代入演算子:

<code class="cpp">class Derived : public ImplicitBase {
  const char* name_;
 public:
  Derived& operator=(const Derived& d) {
    ImplicitBase::operator=(d); // Implicit call to base class's assignment operator
    name_ = strdup(d.name_);
    return *this;
  }
};</code>

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

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