14 C 二階構造模式 友元 詳解

2021-09-07 17:22:18 字數 2500 閱讀 1383

首先回顧以前所學的建構函式

由於建構函式沒有返回值不能判斷執行結果,所以不能保證初始化物件能否成功

比如:

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.建構函式執行結束是否意味...