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