(1)類的建構函式用於物件的初始化
(2)建構函式與類同名並且沒有返回值
(3)建構函式在物件定義時自動被呼叫
(1)如何判斷建構函式的執行結果? ==> 在類中新增乙個標誌(bool),放在建構函式的末尾(判斷函式體是否全部執行),通過功能成員函式判斷標誌狀態。這種方式能夠完成功能,但是設計不夠優美,需要手工進行判斷,應該有更好的方法!!!
(2)在建構函式中執行return語句會發生什麼? ==> 建構函式雖然沒有返回值,但是遇到 return 會結束建構函式
(3)建構函式執行結束是否意味著物件構造成功? ==> 建構函式執行結束,物件不一定構造成功
1 #include 2異常的建構函式3class
test419
20int
geti()
2124
25int
getj()
2629
30int status() //
功能函式,獲取mstatus的值
3134
};35
3637
intmain()
3846
47return0;
48 }
(1)建構函式只提供自動初始化成員變數的機會,但不能保證初始化邏輯一定成功
(2)執行return語句後建構函式立即結束
❉ 建構函式能決定的只是物件的初識狀態,而不能決定物件是否誕生!!
(1)初始化操作不能按照預期完成而得到的物件(建構函式沒有正確執行)
(2)半成品物件是合法的c++ 物件,也是bug 的重要**
5.1 工程開發中的構造過程
5.2 二階構造示例
二階構造過程如下:
第二階段建構函式
1013
public:14
static twophasecons* newinstance(); //
物件建立函式
15};
1617 twophasecons*twophasecons::newinstance()
1827
28return
ret;29}
3031
32int
main()
33二階構造初探
// 陣列類的加強
1intarray.h#ifndef _intarray_h_
2#define _intarray_h_34
class
intarray5;
2122
#endif
1 #include "intarray.cppintarray.h"2
3 intarray::intarray(int
len)47
8bool
intarray::construct()9
20}21else
2225
26return
ret;27}
2829 intarray* intarray::newinstance(int
length)
3038
39return
ret;40}
4142 intarray::~intarray()
4348}49
50int
intarray::length()
5154
55bool intarray::get(int index, int&value)
5663
64return
bret;65}
6667
bool intarray::set(int index, int
value)
6876
77return
bret;
78 }
1 #include 2 #include "main.cppintarray.h"3
4int
main()520
21delete
a;22
23return0;
24 }
(1)建構函式只能決定物件的初始化狀態
(2)建構函式中初始化操作的失敗不影響物件的誕生
(3)初始化不完全的半成品物件是bug的重要**
(4)二階構造人為的將初始化過程分為兩部分
(5)二階構造能夠確保建立的物件都是完整初始化的
第27課 二階構造模式
本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 關於建構函式如判斷 建構函式 的執行結果?在建構函式中執行 return 語句會發生什麼?建構函式執行 結束是否意味著 物件構造成功?為什麼了回答這幾個問題,我們編寫乙個建構函式,並且建構函式中新增return 語句 include...
27 二階構造模式
範例 異常的建構函式 include class test int geti int getj int status int main int argc,const char argv return 0 工程開發中的構造過程可分為 二階構造示例 class twophasecons bool con...
27 二階構造模式
關於建構函式 用於物件的初始化,與類同名並且沒有返回去,物件被定義時自動呼叫。1 如何判斷建構函式的執行結果?沒有辦法,2 建構函式中執行return語句會發生什麼?可以存在return語句,遇到return會立即返回,後邊的語句不會執行。3 建構函式執行結束是否意味著物件構造成功?不完美的解決方法...