c 類建構函式 二階構造法

2021-09-03 00:22:08 字數 965 閱讀 7666

為什麼要用二階構造?

當類的成員比較簡單,如只有賦值等簡單操作時,普通的建構函式就可以。

然而實際中,以物件導向的思維開發程式時,類往往十分複雜,設計到動態記憶體申請、檔案開啟等操作。然而在呼叫建構函式後,無法得知這些複雜的操作是否順利完成。假若動態記憶體未成功申請,然而物件例項在主程式中依然成功建立,這樣的物件稱為半成品物件。在後續對該物件的操作,往往會引起程式的奔潰。

為了防止出現這樣的情況,我們使用二階建構函式,中心思路為把類的初始化分為兩個階段,第一階段為構造不會出錯的類成員,第二階段為構造動態記憶體申請等可能出錯的部分,並以bool形式返回構造成功與否。這兩個階段的連線依靠類的靜態成員函式

第一步:

形式上就是傳統的建構函式,不同的是這裡需要將該建構函式的訪問屬性設定為private,在該建構函式中只進行類中普通成員變數的初始化操作,一般的,純粹的賦值操作不會發生意外(不成功的情況)

第二步:

一般的,類中額外定義乙個名為bool construct()的私有成員方法,該方法中,進行該類的例項化操作時涉及到的系統資源的申請工作,返回值表示申請的成功或失敗

#include using namespace std;

class a

bool construct() //第二段建構函式,防止檔案開啟、系統資源的申請失敗導致半成品物件

public:

static a* newinstance() //必須寫為靜態函式,以方便用類名呼叫該函式, 而不用建立物件例項,返回的是指標型別

return ret;

} void showdata() };

void main()

C 二階建構函式

一 建構函式的問題 建構函式存在問題 a 建構函式只提供自動初始化成員變數的機會 b 不能保證初始化邏輯一定成功,如申請系統資源可能失敗 c 執行return語句後建構函式立即結束 建構函式建立的物件可能是半成品物件,半成品物件是合法的物件,但是是程式bug的 之一。因此實際工程開發過程中使用二階構...

C 二階構造

1.如何判斷建構函式的執行結果?目前無法判斷 2.在建構函式中執行return語句會發生什麼?建構函式直接 返回,執行結束 3.建構函式執行結束是否意味著物件構造成功?不 include class test int geti int getj int status int main return ...

C 中建構函式之二階構造模式

我們在前邊已經知道,建構函式是c 中的一種特殊的函式,其沒有返回值,在物件定義時自動被呼叫,主要用於物件中成員變數的初始化,但是有個問題是,我們前期一直都是預設建構函式能正常執行完畢,但是假如建構函式中執行出錯,或者提前返回,會有什麼情況發生?下邊來看一段 include include using...