首先回顧以前所學的建構函式
由於建構函式沒有返回值不能判斷執行結果,所以不能保證初始化物件能否成功
比如:
class test
}
假如建立物件時,執行new分配時失敗了,便會出現bug,若**量大,是很難找到這個問題的,這種便被稱為半成品物件.
如何來避免半成品物件的誕生呢?
就要用到本章學的二階構造了.
二階構造
將構造過程分為兩步
-資源無關的初始化操作
指不可能出現異常情況的操作,比如:初始化int,flaot等普通變數
-需要使用系統資源的操作
指可能出現異常情況的操作,比如:記憶體申請,訪問檔案等
如下圖所示:
步驟如下:
1.建立乙個私有的建構函式,由於建構函式沒有返回值,所以用來進行第一階段構造
2.建立乙個私有的有返回值函式,用來進行第二階段構造,構造成功返回true,失敗返回false
3.最後建立乙個靜態成員函式,通過new建立乙個物件,然後呼叫1和2步驟的函式,最後進行判斷處理
參考以下示例:
#include class twophasecons
bool construct() // 第二階段建構函式
public:
static twophasecons* newobj(); // 物件建立函式
};twophasecons* twophasecons::newobj()
return ret;
}int main()
c++友元什麼是友元?由於c++的類具有封裝性,在外部無法訪問到類的private私有成員,所以友元就誕生了
-類的友元可以是函式,也可以是另乙個類
比如:test類的友元是個func()函式,則func()函式就能訪問test類的任何成員變數(包括靜態,私有,共有等)
-友元的好處在於,方便快捷.
-友元的壞處在於,破壞了物件導向的封裝性,在現代已經逐漸被遺棄
友元定義,是在類中使用friend關鍵字來宣告,比如:
class test;
void f_func(const test& t)
示例1通過test類的友元(函式)來訪問成員變數,**如下:
#include "stdio.h"
class test
friend void f_func(const test& t); //宣告test的友元是f_func()函式
};int test::n = 3;
void f_func(const test& t)
int main()
執行列印:
t.x=1
t.x=2
t.x=3
示例2通過a類的友元(b類)來訪問成員變數,**如下:
#include "stdio.h"
class a
friend class b; //宣告a的友元是b
};class b
};int main()
執行列印:
t.i=10
t.j=20
詳解C 二階構造模式 友元
首先回顧以前所學的建構函式 由於建構函式沒有返回值不能判斷執行結果,所以不能保證初始化物件能否成功 比如 class test 假如建立物件時,執行new分配時失敗了,便會出現bug,若 量大,是很難找到這個問題的,這種便被稱為半成品物件.如何來避免半成品物件的誕生呢?就要用到本章學的二階構造了.二...
二階構造模式
我們在建立物件的時候,需要呼叫建構函式,對物件做初始化,但是建構函式是沒有返回值的,無法判斷建構函式的執行結果。如果建構函式執行過程中,發生了異常,導致函式提前返回了,那麼這種情況下,我們建立的物件會處於什麼狀態。1.建構函式確定對物件做初始狀態,物件的建立與建構函式無關,也就是說儲存物件的那片記憶...
二階構造模式
模式 方法。設計模式,就是設計方法。前人證明了的行之有效的方法。建構函式 1.關於建構函式 類的建構函式用於物件的初始化。建構函式與類同名並且沒有返回值。建構函式在物件定義時自動被呼叫。問題 1.如何判斷建構函式的執行結果?2.在建構函式中執行return語句會發生什麼?3.建構函式執行結束是否意味...