




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C++詳細(xì)講解對(duì)象的構(gòu)造順序目錄一、局部對(duì)象的構(gòu)造順序二、堆對(duì)象的構(gòu)造順序三、全局對(duì)象的構(gòu)造順序命令行四、小結(jié)
一、局部對(duì)象的構(gòu)造順序
對(duì)于局部對(duì)象
當(dāng)程序執(zhí)行流到達(dá)對(duì)象的定義語(yǔ)句時(shí)進(jìn)行構(gòu)造
下面看一個(gè)局部對(duì)象的構(gòu)造示例:
#includestdio.h
classTest
private:
intmi;
public:
Test(inti)
mi=i;
printf("Test(inti):%d\n",mi);
Test(constTestobj)
mi=obj.mi;
printf("Test(constTestobj):%d\n",mi);
intmain()
inti=0;
Testa1=i;
while(i3)
Testa2=++i;
if(i4)
Testa=a1;
else
Testa(100);
return0;
}
輸出結(jié)果如下:
如果對(duì)象沒有被初始化會(huì)發(fā)生什么,下面看一個(gè)示例:
#includestdio.h
classTest
private:
intmi;
public:
Test(inti)
mi=i;
printf("Test(inti):%d\n",mi);
Test(constTestobj)
mi=obj.mi;
printf("Test(constTestobj):%d\n",mi);
intgetMi()
returnmi;
intmain()
inti=0;
Testa1=i;
while(i3)
Testa2=++i;
gotoEnd;
Testa(100);
printf("a.mi=%d\n",g.getMi());
return0;
}
在g++編譯器下,就會(huì)報(bào)錯(cuò),讓不要使用goto語(yǔ)句,會(huì)跳過(guò)初始化
二、堆對(duì)象的構(gòu)造順序
對(duì)于堆對(duì)象
當(dāng)程序執(zhí)行流到達(dá)new語(yǔ)句時(shí)創(chuàng)建對(duì)象使用new創(chuàng)建對(duì)象將自動(dòng)觸發(fā)構(gòu)造函數(shù)的調(diào)用
下面看一個(gè)堆空間的構(gòu)造順序示例:
#includestdio.h
classTest
private:
intmi;
public:
Test(inti)
mi=i;
printf("Test(inti):%d\n",mi);
Test(constTestobj)
mi=obj.mi;
printf("Test(constTestobj):%d\n",mi);
intgetMi()
returnmi;
intmain()
inti=0;
Test*a1=newTest(i);//Test(inti):0
while(++i10)
if(i%2)
newTest(i);//Test(inti):1,3,5,7,9
if(i4)
newTest(*a1);
else
newTest(100);//Test(inti):100
return0;
}
輸出結(jié)果如下:
三、全局對(duì)象的構(gòu)造順序
對(duì)于全局對(duì)象
對(duì)象的構(gòu)造順序是不確定的不同的編譯器使用不同的規(guī)則確定構(gòu)造順序
下面看一個(gè)全局對(duì)象的構(gòu)造順序示例:
test.h:
#ifndef_TEST_H_
#define_TEST_H_
#includestdio.h
classTest
public:
Test(constchar*s)
printf("%s\n",s);
#endif
test.cpp:
#include"test.h"
Testt4("t4");
intmain()
Testt5("t5");
}
t1.cpp:
#include"test.h"
Testt1("t1");
t2.cpp:
#include"test.h"
Testt2("t2");
t3.cpp:
#include"test.h"
Testt3("t3");
在gcc編譯器中,輸出結(jié)果如下:
下面看一下使用VS2012編譯這些代碼:
(不知道VS2012怎么使用命令行窗口編譯程序的可以看《命令行》不需要可以跳過(guò))
這足以說(shuō)明全局變量的構(gòu)造順序是不確定的。
命令行
以下面的代碼為例
test.h:
#ifndef_TEST_H_
#define_TEST_H_
#includestdio.h
classTest
public:
Test(constchar*s)
printf("%s\n",s);
#endif
test.cpp:
#include"test.h"
Testt4("t4");
intmain()
Testt5("t5");
}
t1.cpp:
#include"test.h"
Testt1("t1");
t2.cpp:
#include"test.h"
Testt2("t2");
t3.cpp:
#include"test.h"
Testt3("t3");
第一步,打開VS2012,選擇工具-VisualStudio命令提示
第二步,實(shí)用cd/d進(jìn)入需要編譯的文件夾。(注意換盤符需要輸入/d)
我想要編譯的文件在C:\Users\HuZeQiu\Desktop\demo文件夾里。
輸入cd/dC:\Users\HuZeQiu\Desktop\demo,按下回車鍵,如下,就轉(zhuǎn)到了目的文件夾
第三步,輸入cltest.cppt2.cppt1.cppt3.cpp-otest.exe編譯程序。(cl命令是用來(lái)編譯程序)按下回車鍵后開始編譯,生成test.exe可執(zhí)行文件,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025離婚協(xié)議書涉及的稅務(wù)問(wèn)題
- 電力工程施工合同解除協(xié)議書范文
- 軟件開發(fā)合同條款措施
- 代謝通路優(yōu)化與生物制造創(chuàng)新-洞察闡釋
- 二手豪華車贈(zèng)與及檢驗(yàn)合同范本
- 深度合作項(xiàng)目現(xiàn)場(chǎng)總監(jiān)聘用協(xié)議書正本
- 車輛牌照租賃與停車服務(wù)綜合合同
- 旅游線路策劃合作協(xié)議
- 跨國(guó)采購(gòu)合同與國(guó)際銷售合同差異分析
- 離婚彩禮返還及財(cái)產(chǎn)分割執(zhí)行細(xì)則協(xié)議書
- 配餐學(xué)校接餐管理制度
- 運(yùn)營(yíng)維護(hù)的合同范例共
- 2025年公共營(yíng)養(yǎng)師考試的重點(diǎn)知識(shí)回顧試題及答案
- 必修三第九課全面推進(jìn)依法治國(guó)的基本要求第四框全民守法導(dǎo)學(xué)案
- 2025年監(jiān)理工程師職業(yè)能力測(cè)試卷:建筑工程監(jiān)理質(zhì)量管理試題卷
- 軟件開發(fā)設(shè)計(jì)模式試題及答案
- 醫(yī)生的個(gè)人成長(zhǎng)經(jīng)歷自傳范文
- 帶狀皰疹知識(shí)
- 六年級(jí)道德與法治教育
- 餐飲企業(yè)員工工資標(biāo)準(zhǔn)
- 青年紅色筑夢(mèng)之旅活動(dòng)
評(píng)論
0/150
提交評(píng)論