二階構造模式

2022-02-04 20:50:09 字數 2083 閱讀 6242

模式:方法。設計模式,就是設計方法。前人證明了的行之有效的方法。

建構函式:

1.關於建構函式

-類的建構函式用於物件的初始化。

-建構函式與類同名並且沒有返回值。

-建構函式在物件定義時自動被呼叫。

問題:1.如何判斷建構函式的執行結果?

2.在建構函式中執行return語句會發生什麼?

3.建構函式執行結束是否意味物件構造成功?

程式設計實驗:異常的建構函式.cpp

1 #include 2

3class

test419

intgeti()

2023

intgetj()

2427

intstatus()

2831

};32

33int

main()

3443

44return0;

45 }

你需要知道的真相:

-建構函式

1.只提供自動初始化變數的機會;

2.不能保證初始化邏輯一定成功;

3.執行return 語句後建構函式立即結束。

建構函式能決定的只是物件的初始狀態,而不是物件的誕生。

半成品物件:

-初始化操作不能按照預期完成而得到的物件;

-半成品物件是合法的c++物件,也是bug的重要**。

半成品物件的危害

intarray.cpp

1 #include "

intarray.h"2

3 intarray::intarray(int

len)47

8bool

intarray::construct()920

}21else

2225

26return

ret;27}

2829 intarray* intarray::newinstance(int

length)

3038

39return

ret;40}

4142

intintarray::length()

4346

47bool intarray::get(int index, int&value)

4855

56return

ret;57}

5859

bool intarray::set(int index, int

value)

6067

68return

ret;69}

7071 intarray::~intarray()

72

針對上面的問題,我們如何使用乙個行之有效的辦法解決?

二階構造:

-工程開發中的建構函式過程可分為

1.資源無關的初始化操作

-不可能出現異常情況的操作

2.需要使用系統資源的操作

-可能出現異常情況,如:記憶體申請,訪問檔案。

步驟:建立物件——》資源無關初始操作——》資源相關初始操作——》資源申請成功——》true——》返回物件

**:

1 #include 2

3class

twophasecons 49

bool construct() //

第二階段建構函式

1013

public:14

static twophasecons* newinstance(); //

物件建立函式

15};

1617 twophasecons*twophasecons::newinstance()

1827

28return

ret;29}

3031

32int

main()

33

小結:-建構函式只能決定物件的初始化狀態;

-建構函式中初始化操作的失敗不影響物件的產生;

-初始化不完全的半成品物件是bug的重要**;

-二階構造人為的將初始化過程分為兩部分;

-二階構造能夠確保建立的物件都是完整初始化的。

二階構造模式

我們在建立物件的時候,需要呼叫建構函式,對物件做初始化,但是建構函式是沒有返回值的,無法判斷建構函式的執行結果。如果建構函式執行過程中,發生了異常,導致函式提前返回了,那麼這種情況下,我們建立的物件會處於什麼狀態。1.建構函式確定對物件做初始狀態,物件的建立與建構函式無關,也就是說儲存物件的那片記憶...

二階構造模式

建構函式只決定物件的初始化狀態,不可以決定物件是否建立。如果在建構函式中使用return,則將構造出乙個半成品物件。半成品物件 建構函式沒有全部執行。二階構造 分兩步來構造乙個物件。第一步 與系統資源無關的初始化操作。不會出現異常操作的 include class twophasecons bool...

二階構造模式

類的構造模式用於物件的初始化 構造模式與類同名並且沒有返回值 建構函式在物件定義時自動被呼叫 如何判斷建構函式的執行結果?在建構函式中執行return語句會發生什麼?建構函式執行結果意味著物件構造成功?1 include 2 class test316 intgeti 1720 intgetj 21...