首頁 >後端開發 >C++ >C 虛擬函數何時可以具有協變回傳類型?

C 虛擬函數何時可以具有協變回傳類型?

DDD
DDD原創
2024-11-28 05:33:16560瀏覽

When Can C   Virtual Functions Have Covariant Return Types?

C 虛函數中的協變回傳類型

在 C 中,繼承的類別可以實現具有不同回傳類型的虛函數。但是,這些傳回類型必須與原始回傳類型協變。

協變表示衍生類別中的回傳類型至少與基底類別中的傳回型別一樣衍生。例如,如果基底類別函數傳回 Base 指針,則衍生類別函數可以傳回 Derived 指針。

這是允許的,因為任何指向派生類別物件的指標都可以隱式轉換為指向基底類別的指標目的。因此,對基底類別中的虛擬函數的呼叫始終可以傳回指向基底類別物件的指針,即使派生類別實作返回指向派生類別物件的指針也是如此。

請考慮以下範例:

class Base {
public:
    virtual ~Base() {}

    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};

在此範例中,Base 類別定義了一個傳回 Base 指標的純虛函數複製。在 Derived 類別中,克隆函數被重寫以傳回 Derived 指標。這是允許的,因為 Derived 是 Base 的衍生類,而 Derived 指標可以隱式轉換為 Base 指標。

以上是C 虛擬函數何時可以具有協變回傳類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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