在衍生類別中使用基底類別建構子和賦值運算子
在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中文網其他相關文章!