歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > PPT文檔下載  

組織程序結(jié)構(gòu)的相關(guān)技術(shù).ppt

  • 資源ID:14508157       資源大小:220.51KB        全文頁(yè)數(shù):23頁(yè)
  • 資源格式: PPT        下載積分:9.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

組織程序結(jié)構(gòu)的相關(guān)技術(shù).ppt

第7章 組織程序結(jié)構(gòu)的相關(guān)技術(shù),C和C+中允許使用相當(dāng)數(shù)量的以#開(kāi)頭的預(yù)處理器指令,包括最常見(jiàn)的宏定義和#include指令。這些指令不是C+語(yǔ)句,在源程序被真正編譯之前,由一個(gè)預(yù)處理器將其替換成標(biāo)準(zhǔn)C+程序,故稱(chēng)為預(yù)處理(器)指令或命令。,7.1 宏定義與條件編譯,7.1.1 宏定義,例如: #define _STRING_H /用于條件編譯目的是說(shuō)明常量_STRING_H是否曾經(jīng)被定義過(guò); #define True 1 #define abs(x) (x)0?(x):-(x) 這種替換中不會(huì)發(fā)生任何計(jì)算行為。因?yàn)楹甓x中沒(méi)有類(lèi)型檢查,目前的第二、三種宏定義已基本被const常量和inline函數(shù)取代。,7.1.2 條件編譯,條件編譯指令使預(yù)處理器能夠有選擇地取舍參加編譯的代碼,是為了提高程序的可移植性而設(shè)置的指令。 #ifdef 宏名 statements_1 #else statements_2 #endif 其中含義:如果已定義了宏,保留語(yǔ)句組statements_1部分參加編譯,否則語(yǔ)句組statements_2部分參加編譯(如果有#else部分)。 條件編譯指令會(huì)出現(xiàn)在每一個(gè)C或C+頭文件中。,7.2 頭文件包含,可以用一條指令代替大量的重復(fù)代碼,減輕了重復(fù)聲明的負(fù)擔(dān)。 例如,如果兩個(gè)程序文件中都使用了函數(shù)print或類(lèi)A,那么,每個(gè)文件中都需要插入函數(shù)的聲明和類(lèi)的定義。 可以利用頭文件將函數(shù)聲明、類(lèi)型定義等集中起來(lái),再以頭文件包含指令插在程序開(kāi)頭。,7.2.1 頭文件包含指令,頭文件包含指令有如下兩種格式: #include #include #include “文件名” #include d:userx.h 兩種格式區(qū)別: 第一種格式一般用于包含系統(tǒng)頭文件,主要在系統(tǒng)目錄中查找文件,速度較快, 第二種格式用于用戶自定義頭文件。主要在更多的目錄下查找,如程序文件所在的目錄等,因此會(huì)消耗更多的查找時(shí)間。 在預(yù)處理時(shí),系統(tǒng)將用查找到的文件內(nèi)容替換掉文件包含指令。,7.2.2 新舊庫(kù)頭文件,標(biāo)準(zhǔn)C+已經(jīng)將這些內(nèi)容重新在std名字空間中做了定義。 C的頭文件:應(yīng)在原來(lái)的C頭文件前加“c”, 如#include ; 舊版C+頭文件:文件名帶“.h”, 如#include ; 標(biāo)準(zhǔn)庫(kù)C+頭文件:文件名不帶“.h”, 如#include 。 事實(shí)上,#include 形式的文件包含雖然可用,但此時(shí)使用的C函數(shù)沒(méi)有包裝在std名字空間里。,7.2.3 類(lèi)定義與實(shí)現(xiàn)的分離,類(lèi)定義與實(shí)現(xiàn)部分通常總是分離的 類(lèi)的定義構(gòu)成.h文件,類(lèi)的實(shí)現(xiàn)形成.cpp文件。 為了使用類(lèi)的定義,.h文件必須對(duì)使用者公開(kāi),這樣,類(lèi)的程序文件中采用文件包含指令包含頭文件,而.cpp文件一般編譯成機(jī)器代碼,使源程序代碼得到了保護(hù)。 與商業(yè)性相關(guān)的類(lèi)定義及其實(shí)現(xiàn)構(gòu)成了類(lèi)庫(kù) 主要的C+類(lèi)庫(kù)包括微軟公司的MFC和Borland公司的OWL,分別集成在他們自己的C+產(chǎn)品中,為軟件開(kāi)發(fā)工作提供支持。,7.2.4 頭文件中的內(nèi)容,頭文件中的基本內(nèi)容是“聲明”,可以包含如下的內(nèi)容:,函數(shù)聲明,如“void print(int);”; 類(lèi)型聲明,如“class A;”,說(shuō)明A是一個(gè)類(lèi); 全局?jǐn)?shù)據(jù)聲明,如“extern int m; extern double a;” 內(nèi)聯(lián)函數(shù)定義,如“inline void fn() . ”; 類(lèi)模板定義,如“template class X . ;”; 類(lèi)型定義,如“class Y . ;enum Z . ;”; 全局常量定義,如“const double pi = 3.14;”; 名字空間定義,如“namespace S . ”。,7.2.5 一個(gè)頭文件示例,條件編譯的作用是使得第二次包含此頭文件時(shí),所有內(nèi)容不再參加編譯.,一個(gè)包含類(lèi)定義的頭文件aclass.h可組織成如下形式: #ifndef _ACLASS_H/如果未定義宏_ACLASS_H,下面內(nèi)容參加編譯 #define _ACLASS_H/定義宏 #include /函數(shù)或類(lèi)定義中使用的頭文件 class A; void print(A #endif/條件編譯結(jié)束,在函數(shù)print和類(lèi)A的實(shí)現(xiàn)文件aclass.cpp中,只要包含如下命令,就可以實(shí)現(xiàn)對(duì)函數(shù)和類(lèi)的聲明了: #include aclass.h,7.3 對(duì)象的構(gòu)造與析構(gòu)次序,#include using namespace std; class A int a; public: A(int av):a(av) cout << A constructor; a= << a << . << endl; ; A a1(1);/進(jìn)入main函數(shù)之前初始化 int main() cout << Enter main function.n; A a2(2);/以下3個(gè)局部對(duì)象按先后順序初始化 static A a3(3); A a4(4); for(int k=0; k<3; k+) A a5(5);/初始化三次 static A a6(6); /靜態(tài)對(duì)象只初始化一次 ,A constructor; a=1. Enter main function. A constructor; a=2. A constructor; a=3. A constructor; a=4. A constructor; a=5. A constructor; a=6. A constructor; a=5. A constructor; a=5.,局部的自動(dòng)對(duì)象在程序流程離開(kāi)所在塊時(shí)被拆除。 外部對(duì)象和靜態(tài)對(duì)象在程序運(yùn)行結(jié)束時(shí)被拆除。 動(dòng)態(tài)對(duì)象在用delete釋放或程序運(yùn)行結(jié)束時(shí)被拆除。 對(duì)象的拆除次序總是與構(gòu)造次序相反的,即最先構(gòu)造的對(duì)象最后拆除,包括并列、有繼承關(guān)系和一個(gè)對(duì)象是另一個(gè)對(duì)象的成員等所有情況。,7.4 名字沖突、屏蔽與名字空間,在C+中有多種作用域。 在同一作用域內(nèi),數(shù)據(jù)名(常量和變量)和函數(shù)名屬于一類(lèi),彼此不能重復(fù),類(lèi)型名(使用class、struct、union和enum定義)屬于另一類(lèi),彼此也不能重復(fù)。 但不同種類(lèi)的名字可以相同(如變量名和類(lèi)型名可相同),不同作用域內(nèi)的名字也可以相同。,7.4.1 名字沖突及對(duì)策,1 局部名對(duì)外部名的屏蔽作用,double A, x;/外部定義變量 class A ;/外部定義類(lèi)型 int main( ) class A ;/內(nèi)部定義類(lèi)型 int x;/main函數(shù)體局部定義變量 A a;/局部定義的A屏蔽外部的A for(int k=0; k<10; k+) double x = 1;/塊內(nèi)定義 cout << x+;/塊內(nèi)的x屏蔽main及以外的x cout << x;/main的x屏蔽外部x ,2 數(shù)據(jù)名和函數(shù)名沖突 在內(nèi)部數(shù)據(jù)或函數(shù)名屏蔽了外部類(lèi)型名時(shí),應(yīng)使用類(lèi)型名的全名(帶class、struct、union或enum關(guān)鍵字)來(lái)表示類(lèi)型名; 在局部定義的類(lèi)型名屏蔽了外部數(shù)據(jù)或函數(shù)名時(shí),以域解析符“:”進(jìn)行區(qū)分。,class X ;/外部類(lèi)型 class Y ;/外部類(lèi)型 int Y = 1;/外部變量 void fn(int X)/形參變量X class X x1; /形參變量X屏蔽了類(lèi)型名X,采用類(lèi)型全名 X+; /形參變量X class Y y1;/必須用全名與外部變量Y相區(qū)別 :Y = 2; /用域解析符:引用外部變量Y ,7.4.2 定義和使用名字空間,1 名字空間的定義 同一種類(lèi)的名字在其中必須唯一的作用域稱(chēng)為名字空間。 此部分內(nèi)容要求學(xué)生自學(xué)。,2 使用名字空間中的定義 此部分內(nèi)容要求學(xué)生自學(xué)。,7.5 C+與C的混合編程,對(duì)用于C+的C語(yǔ)言代碼要做適當(dāng)處理,方法是將C語(yǔ)言的代碼進(jìn)行下述形式的修飾:,extern C /C語(yǔ)言的代碼(外部函數(shù)) 修飾中的extern說(shuō)明被修飾的C語(yǔ)言代碼中的名字應(yīng)該是外部的,而”C”則說(shuō)明這些名字按C語(yǔ)言而非C+語(yǔ)言的方式處理。,7.5.1 extern的作用,extern是C/C+語(yǔ)言中表明函數(shù)和全局變量作用域(可見(jiàn)性)的關(guān)鍵字,作用是告訴編譯器,它所聲明的函數(shù)或變量是全局的(或稱(chēng)外部的),可以在本文件(模塊)或其它文件(模塊)中使用。,1 用extern聲明外部變量 extern int a; 編譯器對(duì)這樣聲明的變量a并不分配內(nèi)存空間,而是在各模塊中查找匹配的定義(int a)。 如果在其它地方定義了外部變量a,上述語(yǔ)句是聲明語(yǔ)句(不能初始化);如果沒(méi)定義外部變量a,上述語(yǔ)句就是變量a的定義語(yǔ)句(可以包含初始化部分)。,2 用extern聲明外部函數(shù) extern int fn(int); 與沒(méi)有extern修飾的效果相同,表示函數(shù)fn可以在任何模塊中引用。 與extern相對(duì)的是static關(guān)鍵字,如果一個(gè)外部變量或函數(shù)用static修飾,表明此變量或函數(shù)僅可以在定義它的模塊中使用,自然不可以被extern “C”修飾。,3 外部引用方法 在模塊的頭文件中對(duì)本模塊提供給其它模塊引用的函數(shù)和全局變量以關(guān)鍵字extern 聲明。,B.cpp的實(shí)現(xiàn): int a = 10; int fn(int x) cout << x; B.h的組織: extern int a;/聲明 extern int fn(int x); 引用a和fn的A.cpp可如下實(shí)現(xiàn): #include b.h int main() fn(a); ,在編譯時(shí),雖然模塊A中找不到fn和a,但系統(tǒng)不會(huì)報(bào)錯(cuò),可以在連接階段從模塊B編譯生成的目標(biāo)代碼中找到它們。,7.5.2 用extern “C”修飾C的代碼,為了使一個(gè)C語(yǔ)言模塊B.c能夠在C和C+環(huán)境下使用,應(yīng)該按如下方式組織它的頭文件B.h:,#ifndef _B_H #define _B_H void func(int x, double y); #endif,#ifndef _B_H #define _B_H extern C void func(int x, double y); #endif,#ifndef _B_H /防止重復(fù)定義 #define _B_H #ifdef _cplusplus/檢測(cè)編譯模式 extern C #endif void func(int x, double y);/函數(shù)聲明部分 #ifdef _cplusplus/檢測(cè)編譯模式 #endif #endif,

注意事項(xiàng)

本文(組織程序結(jié)構(gòu)的相關(guān)技術(shù).ppt)為本站會(huì)員(za****8)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(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),我們立即給予刪除!