欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C++--二階構(gòu)造模式

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é)果如圖所示
C++--二階構(gòu)造模式
可知當(dāng)沒在構(gòu)造函數(shù)添加return返回值時(shí),函數(shù)的運(yùn)行結(jié)果是符合預(yù)期的,初始化邏輯成功了
當(dāng)在構(gòu)造函數(shù)添加return時(shí)
改動的過程運(yùn)行的結(jié)果如圖所示
C++--二階構(gòu)造模式C++--二階構(gòu)造模式
由這次的運(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)存申請,訪問文件
C++--二階構(gòu)造模式

#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é)果如圖所示
C++--二階構(gòu)造模式
小結(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)

成都網(wǎng)頁設(shè)計(jì)公司