首頁  >  文章  >  後端開發  >  如何在 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>

現在,您想要建立一個衍生類別D,它重寫foo() 函數,同時繼承同一組構造函數,包括複製建構函數和賦值運算子。但是,為了避免重複,您希望使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn