首頁 > 後端開發 > C++ > 主體

如何在 C 中利用基底類別的建構子和賦值運算子?

DDD
發布: 2024-11-01 05:46:02
原創
672 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!