A.關(guān)于構(gòu)造函數(shù)
1.類的構(gòu)造函數(shù)用于對象的初始化
2.構(gòu)造函數(shù)與類同名并且沒有返回值
3.構(gòu)造函數(shù)在對象定義時(shí)被自動被調(diào)用
Q.問題的出現(xiàn)
1.如何判斷構(gòu)造函數(shù)的執(zhí)行結(jié)果?
2.在構(gòu)造函數(shù)中執(zhí)行return語句會發(fā)生什么?
3.構(gòu)造函數(shù)執(zhí)行結(jié)束是否意味著對象構(gòu)造成功?
代碼示例
創(chuàng)新互聯(lián)專注于雙河企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。雙河網(wǎng)站建設(shè)公司,為雙河等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
#include <iostream>
using namespace std;
class Test
{
int mi;
int mj;
public:
Test(int i, int j)
{
mi = i;
mj = j
}
int getI()
{
return mi;
}
int getJ()
{
return mj;
}
};
int main()
{
Test t1(1, 2);
cout<<"t1.getI()="<<t1.getI()<<endl;
cout<<"t1.getJ()="<<t1.getJ()<<endl;
return 0;
}
運(yùn)行結(jié)果如圖所示
可知當(dāng)沒在構(gòu)造函數(shù)添加return返回值時(shí),函數(shù)的運(yùn)行結(jié)果是符合預(yù)期的,初始化邏輯成功了
當(dāng)在構(gòu)造函數(shù)添加return時(shí)
改動的過程運(yùn)行的結(jié)果如圖所示
由這次的運(yùn)行結(jié)果我們可以知道,在添加return之后,打印的t1.getJ()的值為隨機(jī)值,初始化失敗了,由此可以推測執(zhí)行到return語句后構(gòu)造函數(shù)結(jié)束了
由此可以對之前提出的問題進(jìn)行了解答
1.構(gòu)造函數(shù)只提供自動初始化成員變量的機(jī)會
2.構(gòu)造函數(shù)不能保證初始化邏輯一定成功
3.構(gòu)造函數(shù)執(zhí)行return語句后構(gòu)造函數(shù)立即結(jié)束
半成品對象
半成品對象的概念:初始化操作不能按照預(yù)期完成而得到的對象,半成品對象時(shí)合法的C++對象,也是Bug的重要來源
二階構(gòu)造
工程開發(fā)中的構(gòu)造過程可以分為
1.資源無關(guān)的初始化操作--不可能出現(xiàn)異常情況的操作
2.需要使用系統(tǒng)資源的操作--可能出現(xiàn)的異常情況,如:內(nèi)存申請,訪問文件
#include <iostream>
using namespace std;
class TwoPhaseCons
{
private:
TwoPhaseCons() // 第一階段構(gòu)造函數(shù)
{
}
bool construct() // 第二階段構(gòu)造函數(shù)
{
return true;
}
public:
static TwoPhaseCons* NewInstance(); // 對象創(chuàng)建函數(shù)
};
TwoPhaseCons* TwoPhaseCons::NewInstance()
{
TwoPhaseCons* ret = new TwoPhaseCons();
// 若第二階段構(gòu)造失敗,返回 NULL
if( !(ret && ret->construct()) )
{
delete ret;
ret = NULL;
}
return ret;
}
int main()
{
TwoPhaseCons* obj = TwoPhaseCons::NewInstance();
cout<<"obj="<<obj<<endl;//打印出obj的地址
delete obj;
return 0;
}
運(yùn)行結(jié)果如圖所示
小結(jié):
1.構(gòu)造函數(shù)只能決定對象的初始化狀態(tài)
2.構(gòu)造函數(shù)中初始化操作的失敗不影響對象的誕生
3.初始化不完全的半成品對象是Bug的重要來源
4.二階構(gòu)造人為的將初始化過程分為兩部分
5.二階構(gòu)造能夠確保創(chuàng)建的對象都是完整初始化的
本文題目:C++--二階構(gòu)造模式
分享URL:http://www.chinadenli.net/article28/joipjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、微信小程序、關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航、電子商務(wù)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)