首頁  >  文章  >  後端開發  >  衍生類別如何利用基底類別建構函數和賦值運算子?

衍生類別如何利用基底類別建構函數和賦值運算子?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 14:31:02885瀏覽

How Can Derived Classes Leverage Base Class Constructors and Assignment Operators?

在衍生類別中使用基底類別建構子和賦值運算子

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

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