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