版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++詳細(xì)講解對象的構(gòu)造順序目錄一、局部對象的構(gòu)造順序二、堆對象的構(gòu)造順序三、全局對象的構(gòu)造順序命令行四、小結(jié)
一、局部對象的構(gòu)造順序
對于局部對象
當(dāng)程序執(zhí)行流到達(dá)對象的定義語句時(shí)進(jìn)行構(gòu)造
下面看一個(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);
intmain()
inti=0;
Testa1=i;
while(i3)
Testa2=++i;
if(i4)
Testa=a1;
else
Testa(100);
return0;
}
輸出結(jié)果如下:
如果對象沒有被初始化會發(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++編譯器下,就會報(bào)錯(cuò),讓不要使用goto語句,會跳過初始化
二、堆對象的構(gòu)造順序
對于堆對象
當(dāng)程序執(zhí)行流到達(dá)new語句時(shí)創(chuàng)建對象使用new創(chuàng)建對象將自動(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é)果如下:
三、全局對象的構(gòu)造順序
對于全局對象
對象的構(gòu)造順序是不確定的不同的編譯器使用不同的規(guī)則確定構(gòu)造順序
下面看一個(gè)全局對象的構(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怎么使用命令行窗口編譯程序的可以看《命令行》不需要可以跳過)
這足以說明全局變量的構(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命令是用來編譯程序)按下回車鍵后開始編譯,生成test.exe可執(zhí)行文件,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026福建福州市閩江學(xué)院附屬中學(xué)招聘1人備考題庫有答案詳解
- 2026湖南邵陽市邵陽縣不動(dòng)產(chǎn)登記中心和邵陽縣土地房屋征收服務(wù)中心選調(diào)4人備考題庫附答案詳解
- 2026福建泉州南安市城鄉(xiāng)水務(wù)集團(tuán)有限公司招聘30人備考題庫完整參考答案詳解
- 2026貴州貴陽觀山湖區(qū)冒沙學(xué)校招聘2人備考題庫及1套參考答案詳解
- 2026西藏日喀則市亞東縣愛國主義教育基地招聘講解員1人備考題庫及答案詳解參考
- 企業(yè)員工薪酬福利手冊
- 汽車零部件檢測與維修操作手冊
- 汽車維修技術(shù)操作規(guī)范手冊
- 智能制造設(shè)備安裝與維護(hù)手冊
- 一例口腔癌患者的傷口護(hù)理查房管理討論
- 學(xué)校教師情緒管理能力提升
- 2026年中國郵政儲蓄銀行招聘試題含答案
- 2025年度電氣工程師述職報(bào)告
- 檔案館機(jī)房設(shè)施設(shè)備管理制度
- 2025年中國抑郁障礙防治指南
- 2024年輕工行業(yè)經(jīng)濟(jì)運(yùn)行報(bào)告
- 電解銅銷售合同范本
- FGR的基因檢測策略與臨床解讀
- 建筑施工工地安全隱患排查清單
- 電力工程安全培訓(xùn)課件
- 中糧貿(mào)易錄用通知書
評論
0/150
提交評論