首頁 > 後端開發 > C++ > C 中的衍生類別可以重寫具有不同返回類型的虛擬函數嗎?

C 中的衍生類別可以重寫具有不同返回類型的虛擬函數嗎?

Susan Sarandon
發布: 2024-12-11 08:35:11
原創
715 人瀏覽過

Can a Derived Class Override a Virtual Function with a Different Return Type in C  ?

C 中的虛函數回傳類型

問題:

繼承的類別可以實現的類別一個具有不同返回類型的虛擬函數,而不使用模板作為返回?

答案:

在某些情況下,是的。允許衍生類別重寫具有不同傳回類型的虛擬函數,前提是傳回類型與原始傳回類型是協變的。協方差意味著衍生函數的傳回類型是基底函數傳回類型的子類型。

考慮以下範例:

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

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

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};
登入後複製

在此範例中,基底類別定義一個名為clone 的純虛函數,並傳回一個Base*。 Derived 類別重寫此虛函數並傳回 Derived*。即使回傳類型與基類不同,但這也是有效的,因為 Derived* 是 Base* 的子類型。

一般來說,函數的回傳類型不被視為其簽名的一部分。只要傳回類型是協變的,您就可以用任何回傳類型重寫成員函數。

以上是C 中的衍生類別可以重寫具有不同返回類型的虛擬函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板