模式:方法。設計模式,就是設計方法。前人證明了的行之有效的方法。
建構函式:
1.關於建構函式
-類的建構函式用於物件的初始化。
-建構函式與類同名並且沒有返回值。
-建構函式在物件定義時自動被呼叫。
問題:1.如何判斷建構函式的執行結果?
2.在建構函式中執行return語句會發生什麼?
3.建構函式執行結束是否意味物件構造成功?
程式設計實驗:異常的建構函式.cpp
1 #include 23class
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 23class
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...