C 中的「有返回值」的「虛」建構函式

2021-05-02 13:53:42 字數 1324 閱讀 9340

c++ 如何會有「虛建構函式」?而且還有返回值?有時我們希望類建構函式能夠像其它普通成員函式一樣使用:帶返回值,可覆蓋(override)。我們可以設計這樣乙個 constructor 函式:

我們在 lb 類中定義了這樣乙個「帶返回值的虛建構函式」。在派生類中,我們可以覆蓋(override)它。現在我們可以讓這個「建構函式」像乙個普通的成員函式一樣使用了(其實它就是乙個普通的成員函式)。這裡有一點需要注意,c++ 中覆蓋(override)乙個非空返回型別的虛函式需要滿足以下兩個條件:

只有返回型別可變,而函式簽名不可變,也即函式名及參數列不可變

返回型別只可以由基類指標型別向派生類指標型別、或者基類引用型別向派生類引用型別轉變

這種特性稱為「協變返回型別(covariant return types)」。

下面的是「複製建構函式」:

這裡,使用中有一點需要特別注意,由於「建構函式」直接返回的是裸右值對像指標或引用,分配了額外的堆空間。呼叫者在使用之後,需要自己顯式呼叫 delete 算符去析構之。我們希望能使之在使用時更像乙個真正的建構函式,其生成的對像在離開作用域時由系統去析構它。否則會有隱患。乙個可行的方法是用智慧型指標去封裝它,比如 std::auto_ptr 類,便可放心使用。如下**:

當然,凡事有利必有弊,使用「虛建構函式」的最大問題可能就是,在派生類中,每每必須覆蓋它才可以……這有時會顯得比較煩……不僅增加了敲**量,還有測試量……

參考:《關於建構函式為何不能是虛函式的說法》

建構函式有返回值

function f1 console.log new f1 返回例項,委託原型 console.log new f1 name f1 console.log f1 name uncaught typeerror cannot read property name of undefined cons...

建構函式的返回值

今天看到同學們在討論乙個問題,這個問題是知乎上的乙個問題,問題描述如下 class a int main 這個問題很有意思的,a的建構函式裡面什麼都沒有,那麼返回乙個怎麼樣的物件呢,還是會出錯呢?顯然這個程式是能夠編譯通過的,但是我們該怎麼認識它呢,我們來看看反彙編吧。可以看到 在call呼叫建構函...

C 中的函式 二 有參有返回值的函式

這次研究下c 中的函式 二 有參有返回值的函式 依然寫乙個小例子,用來測試 跟上乙個例子差不多,區別就是myfunction有二個引數a,b,返回二個數相加的值 f5除錯執行,中斷後轉到反彙編 這裡很明顯看到不同了 這裡就得講到引數傳遞的方式,引數從左向右依次存入暫存器ecx edx 但是不同的程式...