C 27 二階構造模式

2021-09-13 02:21:44 字數 2926 閱讀 9362

答:

test_1.cpp

#include class test

int geti()

int getj()

};int main()

第一次輸出輸出:【無警告,無錯誤】

t1.mi = 1

t1.mj = 16068596

第二次輸出輸出:【無警告,無錯誤】

t1.mi = 1

t1.mj = 4145140

第三次輸出輸出:【無警告,無錯誤】

t1.mi = 1

t1.mj = 16068596

分析:t1.mj 為隨機值

結論

物件的誕生與建構函式是否被執行沒有任何關係。

t雖然執行了建構函式,但建構函式內部是有問題的,導致 t 的初始化狀態不確定,但並沒有影響 t 物件的誕生.

不優雅的解決方法: test_2.cpp

#include class test

int geti()

int getj()

bool status()

};int main()

else

return 0;

}

輸出:

structural abnormality...

本質:強行讓建構函式有乙個返回值,並且手工呼叫 status() 判斷返回狀態

#include class intarray

void set(int index, int value)

void get(int index, int& value)

int length()

~intarray()

};int main()

輸出:

a.length = 5

段錯誤

問題:

對於類的使用者來說並不關心或者熟悉類的內部實現,同時未給出類狀態的判斷方法;

記憶體申請只在極少數情況下會出現申請失敗的情況。

這會帶來極大的困擾並十分難以除錯!!!

需要使用系統資源的操作

bool constrcut() // 第二階段建構函式

public:

static twophasecons* newinstance(); // 物件建立函式

};

twophasecons* twophasecons::newinstance()

return ret;

}

#include class twophasecons

bool constrcut() // 第二階段建構函式

public:

static twophasecons* newinstance(); // 物件建立函式

};twophasecons* twophasecons::newinstance()

return ret;

}int main()

輸出:

obj = 0x8070008

intarray.h

#ifndef _intarray_h_

#define _intarray_h_

class intarray

;#endif

intarray.cpp

#include "intarray.h"

intarray::intarray(int len)

bool intarray::construct()

return ret;

}int intarray::length()

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

return ret;

}bool intarray::set(int index, int value)

return ret;

}intarray::~intarray()

main.cpp

#include #include "intarray.h"

int main()}}

delete a;

return 0;

}

輸出:

a->length = 5

b->[0] = 1

b->[1] = 0

b->[2] = 0

b->[3] = 0

b->[4] = 0

工程上的決定: 物件往往是較大的,因此不應當放在棧空間中,而應當出現在堆空間中

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 建構函式執行結束是否意味著物件構造成功?不完美的解決方法...

lessons 27 二階構造模式

建構函式決定的只是物件的初始化,而不是完整物件產生,所以,初始化操作不能按照預期完成而得到的物件,就會產生乙個不完整的物件 即半成品物件 半成品物件是合法的的物件,但是不能使用,也是bug的重要 對於建構函式而言 1 只提供自動初始化成員變數的機會 2 不能保證初始化邏輯一定成功 3 執行retur...