吉大課件C程序結(jié)構(gòu).ppt

上傳人:sh****n 文檔編號(hào):14113513 上傳時(shí)間:2020-07-03 格式:PPT 頁(yè)數(shù):69 大?。?29.31KB
收藏 版權(quán)申訴 舉報(bào) 下載
吉大課件C程序結(jié)構(gòu).ppt_第1頁(yè)
第1頁(yè) / 共69頁(yè)
吉大課件C程序結(jié)構(gòu).ppt_第2頁(yè)
第2頁(yè) / 共69頁(yè)
吉大課件C程序結(jié)構(gòu).ppt_第3頁(yè)
第3頁(yè) / 共69頁(yè)

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《吉大課件C程序結(jié)構(gòu).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《吉大課件C程序結(jié)構(gòu).ppt(69頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、-1-,C+ProgrammingLanguage,Dr.ZhengXiaojuanAssociateProfessorSoftwareCollegeofNortheastNormalUniversityOctober.2008,-2-,第五章程序結(jié)構(gòu),-3-,本章內(nèi)容,作用域與可見性生存期局部對(duì)象和全局對(duì)象靜態(tài)成員友元常類型編譯預(yù)處理,-4-,類本身可被定義在三種作用域內(nèi):1.全局作用域。全局類,絕大多數(shù)的C+類是定義在該作用域中,我們?cè)谇懊娑x的所有類都是在全局作用域中。2.在另一個(gè)類的作用域中。嵌套類,即一個(gè)類包含在另一個(gè)類中。3.在一個(gè)塊的局部作用域中。局部類,該類完全被塊包含。,1作

2、用域與可見性,-5-,2生存期,2.1靜態(tài)生存期1.定義:與程序的運(yùn)行期相同。靜態(tài)生存期的變量程序開始運(yùn)行就存在,直到程序運(yùn)行結(jié)束生存期結(jié)束。具有文件作用域的變量具有靜態(tài)生存期。2.語(yǔ)法聲明:static。例如,staticintk;3.分配空間:在固定的數(shù)據(jù)區(qū)域內(nèi)分配空間。4.初始化:如果具有靜態(tài)生存期的變量未初始化,則自動(dòng)初始化為0。5.靜態(tài)變量種類:全局變量、靜態(tài)局部變量。,-6-,運(yùn)行時(shí)的存儲(chǔ)空間結(jié)構(gòu),目標(biāo)代碼空間,寄存器空間,靜態(tài)區(qū)空間,堆區(qū)空間棧區(qū)空間,最大地址,最小地址,-7-,2.2局部生存期1.定義:在塊作用域中聲明的變量具有局部生存期。此生存期誕生于聲明點(diǎn),而終止于其作用域

3、的結(jié)束處。2.局部變量種類:具有局部生存期的變量,具有塊作用域。塊作用域內(nèi)靜態(tài)變量,具有靜態(tài)生存期。例如:voidmain()staticintk;/.,-8-,2.3動(dòng)態(tài)生存期定義:由程序中特定的函數(shù)(malloc()和free()調(diào)用或由操作符(new和delete)創(chuàng)建和釋放。具有動(dòng)態(tài)生存期的變量在內(nèi)存的堆區(qū)分配空間。,-9-,#includeclassClockprivate:intHour,Minute,Second;public:Clock()Hour=0;Minute=0;Second=0;,3局部對(duì)象和全局對(duì)象,-10-,voidSetTime(intNewH,intNewM,

4、intNewS);voidShowTime();Clock();voidClock:SetTime(intNewH,intNewM,intNewS)Hour=NewH;Minute=NewM;Second=NewS;voidClock:ShowTime()coutHour:Minute:Secondendl;,-11-,ClockglobClock;voidmain()coutFirsttimeoutput:endl;globClock.ShowTime();globClock.SetTime(10,30,45);Clockmyclock(globClock);coutSecondtimeou

5、tput:endl;myclock.ShowTime();,程序運(yùn)行結(jié)果為Firsttimeoutput:0:0:0Secondtimeoutput:10:30:45,-12-,#includeusingnamespacestd;inti;/文件作用域intmain()i=5;inti;/塊作用域i=7;couti=iendl;/輸出7couti=i;/輸出5return0;,作用域與可見性例,-13-,#includeusingnamespacestd;inti=5;/文件作用域intmain()couti=iendl;return0;i具有靜態(tài)生存期,對(duì)象的生存期例,-14-,#inclu

6、deusingnamespacestd;voidfun();intmain()fun();fun();voidfun()staticinta=1;inti=5;a+;i+;couti=i,a=aendl;,運(yùn)行結(jié)果:i=6,a=2i=6,a=3i是動(dòng)態(tài)生存期a是靜態(tài)生存期,對(duì)象的生存期例,-15-,#includeusingnamespacestd;inti=1;/i為全局變量,具有靜態(tài)生存期。intmain()staticinta;/靜態(tài)局部變量,有全局壽命,局部可見。intb=-10;/b,c為局部變量,具有動(dòng)態(tài)生存期。intc=0;voidother(void);cout-MAIN-n;

7、couti:ia:ab:bc:cendl;c=c+8;other();cout-MAIN-n;couti:ia:ab:bc:cendl;i=i+10;other();,對(duì)象的生存期例,-16-,voidother(void)staticinta=2;staticintb;/a,b為靜態(tài)局部變量,具有全局壽命,局部可見。/只第一次進(jìn)入函數(shù)時(shí)被初始化。intc=10;/C為局部變量,具有動(dòng)態(tài)生存期,/每次進(jìn)入函數(shù)時(shí)都初始化。a=a+2;i=i+32;c=c+5;cout-OTHER-n;couti:ia:ab:bc:cendl;b=a;,17,-17-,voidRender(Image/非法,沒有

8、定義ColorTable類!,-18-,靜態(tài)數(shù)據(jù)成員用關(guān)鍵字static聲明該類的所有對(duì)象維護(hù)該成員的同一個(gè)拷貝必須在類外定義和初始化,用(:)來(lái)指明所屬的類。靜態(tài)成員函數(shù)類外代碼可以使用類名和作用域操作符來(lái)調(diào)用靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)只能引用屬于該類的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù)。,4靜態(tài)成員,-19-,4.1靜態(tài)數(shù)據(jù)成員類的普通數(shù)據(jù)成員:類的靜態(tài)數(shù)據(jù)成員:,在類的每一個(gè)對(duì)象中都擁有一個(gè)拷貝,每個(gè)對(duì)象的同名數(shù)據(jù)成員可以分別存儲(chǔ)不同的數(shù)值,這也是每個(gè)對(duì)象擁有自身特征的保證。,是類的數(shù)據(jù)成員的一種特例。每個(gè)類只有一個(gè)靜態(tài)數(shù)據(jù)成員拷貝,它由該類的所有對(duì)象共同維護(hù)和使用,從而實(shí)現(xiàn)了同一個(gè)類的不同對(duì)象

9、之間的數(shù)據(jù)共享。靜態(tài)數(shù)據(jù)成員具有靜態(tài)生存期。,-20-,2.應(yīng)用要點(diǎn):(1)聲明:加static關(guān)鍵字說(shuō)明。例如:staticintn(2)初始化:在定義時(shí)初始化,且必須在類和所有的成員函數(shù)之外,與全局變量初始化的方法一樣。不能在構(gòu)造函數(shù)中初始化。因?yàn)殪o態(tài)數(shù)據(jù)成員在構(gòu)造函數(shù)被調(diào)用之前就已經(jīng)存在了。形式::=例如:intpoint:n=0;(3)引用:靜態(tài)數(shù)據(jù)成員屬于類,而不屬于任何一個(gè)對(duì)象,所以,在類外通過類名對(duì)它進(jìn)行引用。一般形式如下::;,-21-,(4)靜態(tài)數(shù)據(jù)成員訪問控制限制:private/protected:只能在類內(nèi)通過公有的靜態(tài)成員函數(shù)訪問,在類外無(wú)法引用。public:可以采

10、用“類名:成員名”或“對(duì)象名.成員名”訪問。,-22-,【例4】含有靜態(tài)數(shù)據(jù)成員。#includeclassTestprivate:intk;public:staticintn;Test(intkk)k=kk;n+;voidDisplay()coutn=nk=kendl;,n為公有靜態(tài)數(shù)據(jù)成員,用來(lái)給Test類的對(duì)象計(jì)數(shù),每聲明一個(gè)新對(duì)象,n的值就相應(yīng)加l。,-23-,intTest:n=0;/靜態(tài)數(shù)據(jù)成員初始化voidmain()Testt1(10);t1.Display();Testt2(20);t2.Display();Test:n+;(t1.n+或t2.n+)t2.Display();

11、,三次調(diào)用均訪問的是t1和t2共同維護(hù)的該靜態(tài)成員的拷貝,這樣實(shí)現(xiàn)了在t1和t2兩個(gè)對(duì)象間數(shù)據(jù)共享。,程序運(yùn)行結(jié)果為:n=1k=10n=2k=20n=3k=20,引用方法,-24-,練習(xí):如果我們保持程序的其它部分不變,只將主函數(shù)中改為voidmain()Testt1(10),t2(20);t1.Display();t2.Display();Test:n+;t2.Display();程序運(yùn)行結(jié)果?,-25-,4.2靜態(tài)函數(shù)成員1.定義:使用static關(guān)鍵字聲明的函數(shù)成員。同靜態(tài)數(shù)據(jù)成員一樣,靜態(tài)函數(shù)成員也屬于整個(gè)類,由同一個(gè)類的所有對(duì)象共同維護(hù),為這些對(duì)象所共享。2.靜態(tài)成員函數(shù)如何訪問成員

12、數(shù)據(jù):靜態(tài)的成員函數(shù)沒有this指針(1)訪問靜態(tài)成員數(shù)據(jù),可以直接使用其變量名來(lái)訪問;(2)訪問非靜態(tài)成員數(shù)據(jù),需要使用“對(duì)象名.成員名”;3.公有的、靜態(tài)的成員函數(shù)在類外的調(diào)用方式:類名:成員函數(shù)名(實(shí)參表)4.允許用對(duì)象調(diào)用靜態(tài)的成員函數(shù)。,-26-,【例5】使用靜態(tài)函數(shù)成員。#includeclassMpublic:M(inta)A=a;B+=a;staticvoidf1(Mm);private:intA;staticintB;,voidM:f1(Mm)cout“A=“m.Aendl;cout“B=“Bendl;intM:B=0;voidmain()MP(5),Q(10);M:f1(P

13、);M:f1(Q);,訪問靜態(tài)成員數(shù)據(jù),可以直接使用其變量名,訪問非靜態(tài)成員數(shù)據(jù),需要使用“對(duì)象名.成員名”;,結(jié)果:A=5B=15A=10B=15,-27-,#includeclassAprivate:intx;public:staticvoidf(Aa);voidA:f(Aa)coutx;/對(duì)x的引用是錯(cuò)誤的couta.x;/正確,-28-,【課堂練習(xí)】閱讀程序,寫出程序運(yùn)行結(jié)果#includeclasspointprivate:intx,y;staticintcountP;public:point(intxx=0,intyy=0)x=xx;y=yy;countP+;point(point

14、,intpoint:countP=0;voidmain()point:get_c();/利用類名引用靜態(tài)函數(shù)成員pointa(4,5);coutpointa,a.get_x(),a.get_y();a.get_c();/利用對(duì)象名引用靜態(tài)函數(shù)成員pointb(a);coutpointb,b.get_x(),b.get_y();point:get_c();/利用類名引用靜態(tài)函數(shù)成員,-29-,程序運(yùn)行結(jié)果為:Objectid=0pointa,4,5Objectid=1pointb,4,5Objectid=2,-30-,5友元,1.含義:類的體內(nèi)以friend加以限定的非成員函數(shù),從而可以在此函數(shù)

15、體內(nèi)利用對(duì)象訪問類中private成員。2.為什么需要友元:(1)在封裝和快速性方面合理選擇-類的主要特點(diǎn)是使實(shí)現(xiàn)數(shù)據(jù)隱藏,既不允許非成員函數(shù)對(duì)它訪問,但在某些場(chǎng)合下,非成員函數(shù)體中需要通過對(duì)象名訪問private成員,這可以通過友元函數(shù)來(lái)實(shí)現(xiàn)。(2)有些函數(shù)需要放在外面或者類設(shè)計(jì)完后補(bǔ)充的,而不能成為成員函數(shù),但是又需要訪問類中的私有成員。3.作用:實(shí)現(xiàn)直接訪問數(shù)據(jù)。,-31-,5.1友元函數(shù)1.定義:如果友元是普通函數(shù)或類的成員函數(shù),則稱為友元函數(shù)。友元函數(shù)是在類聲明中由關(guān)鍵字friend修飾的非成員函數(shù)。2.語(yǔ)法:(1)普通函數(shù)聲明為友元函數(shù)的形式:friend(參數(shù)表)(2)成員函數(shù)聲

16、明為友元函數(shù)的形式:friend:(參數(shù)表),-32-,3.應(yīng)用要點(diǎn):(1)友元函數(shù)的聲明可以在類聲明中的任何位置,既可在public區(qū),也可在protected區(qū),意義完全一樣。(2)友元函數(shù)的定義一般放在類的外部,最好與類的其它成員函數(shù)定義放在一起。如果是普通函數(shù)作為友元,也可以放在類中。(3)友元函數(shù)不是本類的成員函數(shù),但是它可以通過對(duì)象名訪問類的所有成員,包括私有和保護(hù)成員。(4)要慎用友元。,-33-,【例】普通函數(shù)作友元函數(shù)。#include#includeclasspointprivate:doublex,y;public:point(doublexx=0,doubleyy=0)

17、x=xx;y=yy;doubleget_x()returnx;doubleget_y()returny;frienddoubledistance(point,-34-,doubledistance(point,-35-,【例】成員函數(shù)作友元函數(shù)。#include#includeclasspoint;/前向聲明point類classApublic:doubledistance(point,-36-,public:point(doublexx=0,doubleyy=0)x=xx;y=yy;doubleget_x()returnx;doubleget_y()returny;frienddoubleA

18、:distance(point,-37-,voidmain()pointmyp1(1,1),myp2(4,5);Aobj;/聲明一個(gè)A類的對(duì)象coutThedistanceis:obj.distance(myp1,myp2)endl;,在主函數(shù)中一定要聲明一個(gè)A類的對(duì)象。只有這樣,才能通過對(duì)象名調(diào)用友元函數(shù)。,-38-,4.普通函數(shù)作友元函數(shù)與成員函數(shù)對(duì)比:(1)定義:原型定義-采用friend加以限定;函數(shù)體定義-不必采用“類名:”加以限定。(2)調(diào)用方面:友元函數(shù)可直接調(diào)用,不必采用對(duì)象方式調(diào)用。5.普通函數(shù)作友元函數(shù)與一般函數(shù)對(duì)比:(1)定義:需要在類中加以原型說(shuō)明(注冊(cè)為友好成員)(2

19、)編程應(yīng)用:友元函數(shù)體內(nèi)可以訪問類中的私有成員。成元函數(shù)友元函數(shù)一般函數(shù)“準(zhǔn)成員函數(shù)”安全性-方便性折中,-39-,5.2友元類1.如果友元是一個(gè)類,則稱為友元類。2.語(yǔ)法聲明形式:friendclass3.應(yīng)用要點(diǎn):(1)友元類的聲明同樣可以在類聲明中的任何位置。(2)友元類的所有成員函數(shù)都成為友元函數(shù)。例如,若A類為B類的友元類,則A類的所有成員函數(shù)都是B類的友元函數(shù),都可以訪問B類的私有和保護(hù)成員。,-40-,用友元類的方法重做例8。#include#includeclasspoint;/前向聲明point類classApublic:doubledistance(pointclasspo

20、int,-41-,private:doublex,y;public:point(doublexx=0,doubleyy=0)x=xx;y=yy;doubleget_x()returnx;doubleget_y()returny;friendclassA;/A類為友元類;doubleA:distance(point,-42-,voidmain()pointmyp1(1,1),myp2(4,5);Aobj;/必須聲明一個(gè)A類的對(duì)象coutThedistanceis:“obj.distance(myp1,myp2)endl;,友元類的成員函數(shù)可以通過對(duì)象名直接訪問到隱藏的數(shù)據(jù),達(dá)到高效協(xié)調(diào)工作的目的

21、。,-43-,4.兩點(diǎn)注意:友元關(guān)系是不能傳遞的。B類是A類的友元,C類是B類的友元,C類和A類之間如果沒有聲明,就沒有任何友元關(guān)系,不能進(jìn)行數(shù)據(jù)共享。友無(wú)關(guān)系是單向的。如果聲明B類是A類的友元,B類的成員函數(shù)就可以訪問A類的私有和保護(hù)數(shù)據(jù),但A類的成員函數(shù)卻不能訪問B類的私有和保護(hù)數(shù)據(jù)。,-44-,1.功能:類型修飾符,左結(jié)合。用來(lái)凍結(jié)一個(gè)變量的值,使其值在程序中不能被進(jìn)一步改變(置成只讀屬性,即變?yōu)槌A浚?.定義:const類型定義符變量名=初值;(當(dāng)T是一個(gè)簡(jiǎn)單數(shù)據(jù)類型時(shí)Tconst=constT)例如:constintsumValue=10;(或intconstsumValue=10

22、;)3.應(yīng)用要點(diǎn):(1)替代C中的預(yù)處理命令#define,但比它更加語(yǔ)義精確,因?yàn)?define無(wú)法反映常量的數(shù)據(jù)類型。如:#definesumValue=10/此時(shí)的sumValue是char型還是int型,6常類型(const),-45-,(2)對(duì)變量經(jīng)const修飾后,必須給變量賦初值(但函數(shù)的形參不需賦初值),一經(jīng)const修飾后便不能修改此變量之值constintsumValue=10;sumValue=0;/錯(cuò)誤voidDisplay(constint*a,intn)couta0;/=*(a+0),顯示數(shù)組中的第一個(gè)元素之值a0=1;/錯(cuò)誤,不能修改其值(不能通過指針來(lái)改變目標(biāo)單

23、元之值),-46-,()區(qū)分修飾指針的兩種不同用法:a)指向常對(duì)象的指針變量:constint*p=p0=2.,constint*pint*constp=,-47-,()C+視const修飾的符號(hào)名為常量特性,因而它可以用于任何可能出現(xiàn)數(shù)字常量的場(chǎng)合(如數(shù)組的大小的說(shuō)明等).constintArraySize=10;chararrayArraySize;()由于C+視const修飾的符號(hào)名為常量特性,因而并不對(duì)它實(shí)際分配內(nèi)存空間constintsumValue=10;/不實(shí)際分配內(nèi)存空間intsumValue=10;/實(shí)際分配內(nèi)存空間(兩個(gè)字節(jié))()#define所定義的符號(hào)名為全局性常量,因

24、而在整個(gè)程序中應(yīng)保持唯一性;而const可以說(shuō)明一個(gè)局部或全局性同名常量(據(jù)此可以改變const符號(hào)名之值),-48-,#defineMin1constintMax=100voidmain(void)#defineMin2/錯(cuò)誤,不能再定義同名常量constintMax=200/可以再定義同名局部常量,-49-,7.1常引用定義:使用const關(guān)鍵字聲明的引用稱為常引用。常引用所引用的對(duì)象不能被更新。語(yǔ)法:常引用的聲明形式:constconstint這段程序編譯時(shí)有兩個(gè)錯(cuò)誤:errorC2530:m:referencesmustbeinitializederrorC2166:l-valuesp

25、ecifiesconstobject,-51-,將上述程序稍作修改,#includevoidmain()intn=5;constint這時(shí),程序運(yùn)行結(jié)果為m=5,-52-,【例10】常引用作形參。#includevoiddisplay(constdoubleerrorC2166:l-valuespecifiesconstobject,常引用做形參時(shí),函數(shù)不能更新r所引用的對(duì)象,因此,對(duì)應(yīng)的實(shí)參就不會(huì)被破壞。,-53-,7.2常對(duì)象定義:使用const關(guān)鍵字聲明的對(duì)象稱為常對(duì)象。語(yǔ)法:常對(duì)象的聲明形式:const或const聲明常對(duì)象的同時(shí),也要進(jìn)行初始化,而且該對(duì)象以后不能再被更新。class

26、Aprivate:intx,y;,-54-,public:A(inti=0,intj=0)x=i;y=j;/.;Acobj1;Aconstcobj2(3,4);cobj1.print();cobj2.print();X/.errorC2662:print:cannotconvertthispointerfromconstclassAtoclassA3目的:const成員函數(shù)表示該成員函數(shù)只能讀類數(shù)據(jù)成員,而不能修改類成員數(shù)據(jù)。即在不改變對(duì)象的成員函數(shù)的函數(shù)原型中加上const說(shuō)明??商岣叱绦虻目勺x性。還能提高程序的可靠性,已定義成const的成員函數(shù),一旦企圖修改數(shù)據(jù)成員的值,則編譯器按錯(cuò)誤處

27、理。4應(yīng)用要點(diǎn):const是加在函數(shù)聲明后面的類型修飾符,它是函數(shù)類型的一個(gè)組成部分,因此,在實(shí)現(xiàn)部分也要帶const關(guān)鍵字。,如果將const放在函數(shù)聲明前意味著函數(shù)的返回值是常量,意義完全不同。,-56-,const關(guān)鍵字可以被用于對(duì)重載函數(shù)的區(qū)分。例如,可以在類中這樣聲明:voidfun();voidfun()const;常成員函數(shù)不能更新對(duì)象的數(shù)據(jù)成員,也不能調(diào)用該類中沒有用const修飾的成員函數(shù)。如果將一個(gè)對(duì)象說(shuō)明為常對(duì)象,則通過該對(duì)象只能調(diào)用它的常成員函數(shù),而不能調(diào)用其它成員函數(shù)。在C+中,const對(duì)象只能調(diào)用const成員函數(shù),-57-,【例11】常成員函數(shù)。#include

28、classAprivate:intx,y;public:A(inti=0,intj=0)x=i;y=j;voidfun()/成員函數(shù)cout成員函數(shù):x=x,y=yendl;voidfun()const/常成員函數(shù)cout常成員函數(shù):x=x,y=yendl;,-58-,voidmain()Aobj1(1,2);obj1.fun();constAobj2(3,4);/A類常對(duì)象obj2.fun();,通過對(duì)象obi1調(diào)用的是一般的成員函數(shù),而通過對(duì)象obj2調(diào)用的是用const修飾的常成員函數(shù)。,程序運(yùn)行結(jié)果為成員函數(shù):x=1,y=2常成員函數(shù):x=3,y=4,-59-,7.4常數(shù)據(jù)成員1.定義

29、:使用關(guān)鍵字const說(shuō)明的數(shù)據(jù)成員。包括常引用、常對(duì)象等,常數(shù)據(jù)成員不能被更新.2.初始化:用成員初始化列表的方式通過構(gòu)造函數(shù)對(duì)該數(shù)據(jù)成員進(jìn)行初始化。,-60-,【例12】常數(shù)據(jù)成員。#includeclassAprivate:constintx;/常數(shù)據(jù)成員staticconstinty;/靜態(tài)常數(shù)據(jù)成員public:constint/常引用,本程序有三個(gè)常數(shù)據(jù)成員,-61-,A(inti):x(i),r(x)/常數(shù)據(jù)成員通過初始化列表獲得初值voidfun()coutx=x,y=y,r=rendl;constintA:y=5;/靜態(tài)常數(shù)據(jù)成員的初始化voidmain()Aobj1(1),

30、obj2(2);obj1.fun();obj2.fun();,程序運(yùn)行結(jié)果為:x=1,y=5,r=1x=2,y=5,r=2,-62-,編譯預(yù)處理,1.定義:預(yù)處理程序又稱為預(yù)處理器,它包含在編譯器中。預(yù)處理程序提供了一組編譯預(yù)處理指令和預(yù)處理操作符。編譯器在對(duì)源程序進(jìn)行編譯之前,首先要由預(yù)處理程序?qū)Τ绦蛭谋具M(jìn)行預(yù)處理,然后編譯器接受預(yù)處理程序的輸出,并將源代碼轉(zhuǎn)化成用機(jī)器語(yǔ)言編寫的目標(biāo)文件。預(yù)處理指令實(shí)際上不是C+語(yǔ)言的一部分,它只是用來(lái)擴(kuò)充C+程序設(shè)計(jì)的環(huán)境。,-63-,需預(yù)處理的源程序,預(yù)處理器,源程序,編譯程序,目標(biāo)匯編程序,匯編程序,可重定位的目標(biāo)代碼,連接/裝配程序,絕對(duì)目標(biāo)代碼,高

31、級(jí)語(yǔ)言程序到可執(zhí)行代碼的轉(zhuǎn)換過程,-64-,2.使用預(yù)處理指令需要注意以下幾點(diǎn):所有的預(yù)處理指令在程序中都是以“#”來(lái)引導(dǎo)。每一條預(yù)處理指令單獨(dú)占用一行,不需要用分號(hào)結(jié)束。預(yù)處理指令可以根據(jù)需要出現(xiàn)在程序中的任何位置。3.預(yù)處理指令:,-65-,(1)#include指令1)定義:#include指令也稱文件包含指令,其作用是將另一個(gè)源文件嵌入到當(dāng)前源文件中該點(diǎn)處。2)語(yǔ)法及功能:格式1:#include功能:按標(biāo)準(zhǔn)方式搜索C+系統(tǒng)目錄下的include子目錄。格式2:#include“文件名”功能:首先在當(dāng)前目錄中搜索,若沒有,再按標(biāo)準(zhǔn)方式搜索。,-66-,(2)#define和#undef

32、指令1)定義:C,#define符號(hào)常量帶參數(shù)的宏。#definePI3.14/定義了一個(gè)符號(hào)常量PI#defineMAX(a,b)(a)(b)?(a):(b)/定義一個(gè)帶參數(shù)的宏MAX(a,b)仍可這樣定義被const替代inline內(nèi)嵌函數(shù)#undef的作用是刪除由#define定義的宏,使之不再起作用。,C+,-67-,(3)條件編譯指令1)定義:限定程序中的某些內(nèi)容要在滿足一定條件的情況下才參與編譯。利用條件編譯可以使同一個(gè)源程序在不同的編譯條件下產(chǎn)生不同的目標(biāo)代碼。2)語(yǔ)法:形式1:#ifdef標(biāo)識(shí)符程序段1#else程序段2#endif,如果“標(biāo)識(shí)符”已經(jīng)定義過,則編譯程序段1,否

33、則編譯程序段2;如果沒有程序段2,則#else可以省略。,-68-,形式2:#ifndef標(biāo)識(shí)符程序段1#else程序段2#endif例:#ifndefMYHEAD_H#defineMYHEAD_H#endif本段代碼能夠保證符號(hào)MYHEAD_H只有一次定義。,如果“標(biāo)識(shí)符”未被定義過,則編譯程序段1,否則編譯程序段2;如果沒有程序段2,則#else可以省略。,-69-,由于文件包含指令可以嵌套使用,在設(shè)計(jì)程序時(shí)要避免多次重復(fù)包含統(tǒng)一個(gè)頭文件,否則會(huì)引起變量及類的重復(fù)定義。,/main.cpp#include“file1.h”#include“file2.h”intmain()/file1.h#include“head.h”/file2.h#include“head.h”/head.hclasspoint,/head.h#ifndefHEAD_H#defineHEAD_HClassPoint#enddif,

展開閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!