面向?qū)ο蟪绦蛟O(shè)計(jì)語言C_第1頁
面向?qū)ο蟪绦蛟O(shè)計(jì)語言C_第2頁
面向?qū)ο蟪绦蛟O(shè)計(jì)語言C_第3頁
面向?qū)ο蟪绦蛟O(shè)計(jì)語言C_第4頁
面向?qū)ο蟪绦蛟O(shè)計(jì)語言C_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第六章 C+程序的結(jié)構(gòu)6.1 變量的類型 除了按數(shù)據(jù)類型區(qū)分變量外,根據(jù)變量定義的位置,可以把變量分成全局變量與局部變量。全局變量是指定義在函數(shù)體外部的變量,它能被所有函數(shù)使用。局部變量是指定義在函數(shù)或復(fù)合語句中的變量,只能在函數(shù)或復(fù)合語句中使用。 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型int g=100000;int sum(int x, int y) int sum=0; for(int i=x;i=y;i+) sum=sum+i; return sum;void main() int x=1,y=100; coutsum(x,y)+gendl;12345

2、678910111213g為全局變量sum()中 x、y為局部變量main()中的 x、y為局部變量6.1.2 變量的存儲類型 C+中變量有auto 、extern、register、static四種存儲類型。1.auto說明符 auto說明符說明定義的是一個(gè)局部變量。局部變量默認(rèn)存儲類型為auto, 所以在程序中很少使用auto說明符說明。2. register說明符 register說明符在定義變量時(shí)說明此變量存儲在CPU中的寄存器中,以加快存取速度。一般編譯器自己選擇幾個(gè)變量采用寄存器存儲,不需要在程序中聲明。3. extern說明符 如果一個(gè)完整的計(jì)算機(jī)程序很大,分成多個(gè)模塊,放在不同

3、的文件中,分開編譯成目標(biāo)文件,最后連接成一個(gè)完整的可執(zhí)行代碼。對于所有模塊共同使用的全局變量,如果在所有的模塊中都定義,在連接時(shí)就會出錯(cuò)。 解決辦法是只在一個(gè)模塊中定義全局變量,在其他模塊中用extern說明這是一個(gè)“外來”的全局變量。電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型/* p6_1_p.cpp * 主程序 */#include using namespace std;extern void p1dispG();extern void p2dispG();extern void p2d

4、ispg();int G=0,g=0;void main() p1dispG();p2dispG();p2dispg();coutin p G=Gendl;coutin p g=gendl;123456789101112131415161718 / p6_1_p1.cpp#include using namespace std;extern int G;void p1dispG()G=11; coutin p1 G=Gendl; 123456789/ p6_1_p2.cpp#include using namespace std;extern int G;extern int g;void p

5、2dispG() G=22; coutin p2 G=Gendl;void p2dispg() g=222; coutin p2 g=gendl; 123456789101112131415運(yùn)行結(jié)果:in p1 G=11in p2 G=22in p2 g=222in p G=22in p g=222 6.1.2 變量的存儲類型 4. static說明符 static說明符用于在定義變量時(shí)將變量聲明為成static(靜態(tài))變量。 其格式為: static可用來聲明全局靜態(tài)變量和局部靜態(tài)變量。當(dāng)聲明全局靜態(tài)變量時(shí),全局靜態(tài)變量只能供本模塊使用,不能被其它模塊再聲明為extern變量。 例如:將程序

6、p6_1_p.cpp中的全局變量聲明為: static int G=0; 那么在其他模塊中就不能聲明為: extern int G; /錯(cuò)誤,G已經(jīng)是一個(gè)static變量; 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院static 數(shù)據(jù)類型 變量名=初值; C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型注意: 當(dāng)一個(gè)局部變量聲明為static變量,它既具有局部變量的性質(zhì):只能在函數(shù)體局部存??;又具有全局變量的性質(zhì):函數(shù)多次進(jìn)入,變量的值只初始化一次。因此靜態(tài)局部變量實(shí)質(zhì)是一個(gè)供函數(shù)局部存取的全局變量。 6.1.2 變量的存儲類型 static型變量電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院/* 6_2.cpp * 靜態(tài)局

7、部變量的使用 */#includeusing namespace std;void fun() static int n; int m=0; n+; m+; coutm=m, n=nendl;void main() for (int i=0;i4;i+) fun(); 12345678910111213141516171819 C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型運(yùn)行結(jié)果:m=1 n=1m=1 n=2m=1 n=3m=1 n=4 靜態(tài)局部變量n只是在函數(shù)fun()第一次進(jìn)入時(shí)初始化0,隨后每次進(jìn)入不再賦初值 6.1.3 變量在內(nèi)存中的存儲 當(dāng)一個(gè)程序準(zhǔn)備運(yùn)行時(shí),操作系統(tǒng)會為程序分配一塊內(nèi)存

8、空間,C+程序的內(nèi)存通常被分為四個(gè)區(qū): 全局?jǐn)?shù)據(jù)區(qū)(data area) 代碼區(qū)(code area) 棧區(qū)(stack area) 堆區(qū)(heap area) 全局變量、靜態(tài)變量、字符串常量、常變量存放在全局?jǐn)?shù)據(jù)區(qū);所有的函數(shù)和代碼存放在代碼區(qū);為運(yùn)行函數(shù)而分配的函數(shù)參數(shù)、局部變量、返回地址存放在棧區(qū);堆區(qū)用于動態(tài)內(nèi)存分配。 變量的生存期為從產(chǎn)生到消失的時(shí)期。全局變量、靜態(tài)變量、常變量生存周期為整個(gè)程序的生存周期,因此稱為靜態(tài)生存期;局部變量的生存周期起于函數(shù)調(diào)用,結(jié)束于函數(shù)調(diào)用結(jié)束,其生存期是動態(tài)的,因此稱為動態(tài)生存期。電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類

9、型注意: 堆空間不是系統(tǒng)為程序自動分配的,它是程序執(zhí)行過程中由new語句為變量分配的。即使指向堆空間的指針變量消失,new語句分配的空間也不會消失。new語句分配的空間由delete語句釋放。 6.1.3 變量在內(nèi)存中的存儲 常變量(常量)、全局變量、局部靜態(tài)變量、字符串常量在程序運(yùn)行前在數(shù)據(jù)區(qū)進(jìn)行分配。并且依次按照常變量、全局變量、局部靜態(tài)變量的順序從低地址向高地址分配。常變量按定義的先后次序分配,全局變量、局部變量也一樣。 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院/* p6_3.cpp * 顯示各類變量的內(nèi)存分配 */ #include using namespace std;int k=300;

10、const int i=100;#define n 10const int j=200;void fun(int i=1,int j=2) int k=3; static int l=0; char *p=new charn+1; for(int m=0;mn;m+) pm=A+m; pm=0; coutAdddress of parameter variable:endl; 12345678910111213141516171819 C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型6.1.2 變量的存儲類型 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院 cout&i=&it&j=&jendl; coutAddd

11、ress of local variable:endl; cout&k=&kt&p=&pt&m=&mendl; coutAdddress of static local variable:endl; cout&l=&lendl; coutAddress of heap: (void *)pendl; coutbefore delete p=pendl; delete p; coutafter delete: (void *)pendl; coutp=pendl;void main() L1:fun(); L2:coutAdddress of global variable:endl;cout&

12、i=&it&j=&jt&k=&kendl; coutAddress of function:endl;cout&fun=&funt&main&mainendl; 20212223 2425262728293031323334353637 39C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型運(yùn)行結(jié)果:Adddress of parameter variable:&i=0013FF2C&j=0013FF30Adddress of local variable:&k=0013FF20&p=0013FF1C&m=0013FF18Adddress of static local variable:&l=0047

13、773CAddress of heap: 00480410 /釋放堆空間前指針的值before delete p=ABCDEFGHIJ /釋放堆空間前堆中的內(nèi)容after delete: 00480410 /釋放堆空間后指針的值不變p=葺葺葺葺葺葺葺? /釋放堆空間后,堆中的內(nèi)容無意義Adddress of global variable:&i=0046C01C&j=0046C020&k=00474DC0Address of function:&fun=004010A0&main=0040123F 6.1.2 變量的存儲類型電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類

14、型解釋 :當(dāng)函數(shù)被調(diào)用時(shí)才為函數(shù)的形參、返回代碼地址、局部變量分配空間。由于空間在棧中,所以從棧底開始依次按形參、返回代碼地址、局部變量的順序從高地址向低地址分配。其中,在分配形參地址時(shí),按從右向左的順序;分配各局部變量的地址時(shí),按定義的先后次序。當(dāng)函數(shù)調(diào)用結(jié)束,該函數(shù)占用的棧空間收回。收回的順序(即各變量消失的順序)與分配的順序相反。程序運(yùn)行時(shí),系統(tǒng)為各個(gè)函數(shù)的執(zhí)行代碼在代碼段中分配空間,然后將代碼調(diào)入內(nèi)存。各函數(shù)在代碼區(qū)的排列次序按函數(shù)定義的先后次序。程序運(yùn)行結(jié)束,程序占用的代碼段空間收回。常變量(常量)、全局變量、局部靜態(tài)變量、字符串常量在程序運(yùn)行前在數(shù)據(jù)區(qū)進(jìn)行分配。并且依次按照常變量、

15、全局變量、局部靜態(tài)變量的順序從低地址向高地址分配。常變量按定義的先后次序分配,全局變量、局部變量也一樣。當(dāng)程序運(yùn)行結(jié)束后,各全局變量的空間被系統(tǒng)收回,收回的順序與分配的順序相同,即:先分配先收回。堆空間不是系統(tǒng)為程序自動分配的,它是程序執(zhí)行過程中由new語句為變量分配的。即使指向堆空間的指針變量消失,new語句分配的空間也不會消失。New語句分配的空間由delete語句釋放。變量的生存期為從產(chǎn)生到消失的時(shí)期。全局變量、靜態(tài)變量、常變量生存周期為整個(gè)程序的生存周期,因此稱為靜態(tài)生存期;局部變量的生存周期起于函數(shù)調(diào)用,結(jié)束于函數(shù)調(diào)用結(jié)束,其生存期是動態(tài)的,因此稱為動態(tài)生存期。 電子科技大學(xué)計(jì)算機(jī)學(xué)

16、院 軟件學(xué)院6.2 標(biāo)識符的作用域與可見性 標(biāo)識符的作用域是標(biāo)識符在程序源代碼中的有效范圍,從小到大分為函數(shù)原型作用域、塊作用域(局部作用域),文件作用域(全局作用域)。1. 函數(shù)原型作用域 函數(shù)原型作用域是C+程序中最小作用域。函數(shù)原型聲明時(shí)形式參數(shù)的作用范圍就是函數(shù)原型的作用域。 例如:有下列函數(shù)聲明: fun(int i, int j); 標(biāo)識符i、j的作用域?yàn)楹瘮?shù)原型,即函數(shù)fun形參的兩個(gè)括號之間,在其他地方不能引用這些標(biāo)識符。2. 塊作用域 所謂的塊就是用括起來的一段程序,在塊中定義的標(biāo)識符,作用域從聲明處開始,一直到塊的大括號為止。其中有下列情況屬于一個(gè)塊: (1) 函數(shù)的形參與

17、函數(shù)體屬于一個(gè)塊; (2) for()語句中,括號()中屬于一個(gè)塊; 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型6.2 標(biāo)識符的作用域與可見性電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院/* p6_4.cpp * * 標(biāo)識符作用域 */ #include using namespace std;int i=100,j=200;void fun(int i=2) coutL2: i=iendl; int i=3; coutL3: i=iendl; for(int i=4;i5;coutL6:i=iendl,i+) 123456789101112131415C+語言程序設(shè)計(jì)教程

18、第6章構(gòu)造數(shù)據(jù)類型i=5i=4i=3i=2 6.2 標(biāo)識符的作用域與可見性電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院 coutL4: i=iendl; int i=5 i+; coutL5: i=iendl; void main() fun(); 16171819 20212223 2425262728C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型運(yùn)行結(jié)果:L2: i=2L3: i=3L4: i=4L5: i=6L6: i=4 6.2 標(biāo)識符的作用域與可見性 4. 可見性 程序運(yùn)行到某一處,能夠引用到的標(biāo)識符,稱為該處可見到的標(biāo)識符??梢娦员硎緩哪程幠芸吹绞裁础?梢娦缘囊话阋?guī)則是: (1) 塊內(nèi)層可以看到外層

19、定義的各種標(biāo)識符。 (2) 如果內(nèi)、外層塊定義的標(biāo)識符同名,實(shí)質(zhì)代表不同的實(shí)體,內(nèi)層只能看到與 之最近的標(biāo)識符,相當(dāng)于外層標(biāo)識符被內(nèi)層同名的標(biāo)識符隱藏了。 (3) 內(nèi)層標(biāo)識符的作用域不能覆蓋(作用)到外層,所以外層看不到內(nèi)層的標(biāo)識符。 (4) 同層中,后面語句定義的標(biāo)識符作用域不能作用到前面語句和塊。因此,前 面語句看不到后面語句定義的標(biāo)識符。 (5) 作用域作用的方向?yàn)閺耐庀騼?nèi)、從前向后;可見性的方向則從內(nèi)向外、從后 向前。電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型6.3 程序的文件結(jié)構(gòu)與編譯預(yù)處理命令 一個(gè)高級語言源程序在計(jì)算機(jī)上運(yùn)行,必須先用編譯程序?qū)⑵浞g

20、為機(jī)器語言。在編譯之前還要做某些預(yù)處理工作,如去掉注釋,變換格式等。 C+源程序中以#開頭、以換行符結(jié)尾的行稱為預(yù)處理命令。預(yù)處理命令不是C+語言的語法成分,在編譯前由預(yù)處理器執(zhí)行,在目標(biāo)程序中,不含預(yù)處理指令對應(yīng)的機(jī)器碼。因此,預(yù)處理命令不以分號結(jié)尾。 許多預(yù)處理命令更適合程序員,但為了處理C遺留的代碼,C+編程者也應(yīng)該熟悉預(yù)處理命令。 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型6.3 程序的文件結(jié)構(gòu)與編譯預(yù)處理命令 1. 文件包括 # include命令 文件包含是指在一個(gè)C+源程序中通過#include命令將另一個(gè)文件(通常是.h、.c或.cpp為后綴的文件

21、)的全部內(nèi)容包含進(jìn)來。 文件包含處理命令的一般格式為: 編譯時(shí)預(yù)編譯器將被包含文件的內(nèi)容插入到源程序中#include命令的位置,以形成新的源程序。 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院 #include 或 #include 被包含文件名C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型/* p6_5.cpp * 主程序 */#include using namespace std;#include mymath.hvoid main() coutmax(5,6)endl; 12345678910/* mymath.h * 一些自定義

22、的數(shù)學(xué)函數(shù) */#include using namespace std;int max(int x,int y) return xy?x:y; 12345678910#include using namespace std;#include using namespace std;int max(int x,int y) return xy?x:y;void main() coutmax(5,6)endl;1234567891011 對主程序p6_5.cpp編譯時(shí)預(yù)處理程序執(zhí)行#includemymath.h, 將p6_5.cpp變成: 6.3 程序的文件結(jié)構(gòu)與編譯預(yù)處理命令 2. 不帶參數(shù)

23、的宏定義 宏定義分為兩種:不帶參數(shù)的宏定義和帶參數(shù)的宏定義。 #define 命令定義一個(gè)標(biāo)識符來代表一個(gè)字符串(表達(dá)式),在源程序中發(fā)現(xiàn)該標(biāo)識符時(shí),都用該字符串替換,以形成新的源程序。這種標(biāo)識符稱為宏名(macro name),將程序中出現(xiàn)的與宏名相同的標(biāo)識符替換為字符串的過程稱為宏替換或宏代換(macro substitulition)。 不帶參數(shù)的宏定義的一般形式是: 其中:#define是宏定義命令名稱。標(biāo)識符(宏名)被定義用來代表后面的單詞串。單詞串是宏的內(nèi)容文本,也稱為宏體,可以是任意以回車換行結(jié)尾的文字。單詞串一般不用分號結(jié)尾。電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院 #define 標(biāo)

24、識符 單詞串 C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型 源程序#include using namespace std;#define SIZE 10#define NEWLINE n#define TAB tvoid main() int aSIZE, i; for (i = 0; i SIZE; i+) coutaiTAB; coutNEWLINE;123456789101112預(yù)編譯處理(宏替換)后的源程序#include using namespace std;#define SIZE 10#define NEWL

25、INE n#define TAB tvoid main() int a 10 , i; for (i = 0; i 10 ; i+) coutai t; cout (y) ) ? (x) : (y) )void main() float a = -2.5, b = -3.2; coutMAX(a,b)endl; 123456預(yù)編譯處理(宏替換)后的新源程序 void main() float a = 2.5, b = -3.2; cout (b) ) ? (a) : (b) ) (b) ) ? (a) : (b) ),然后將MAX(a,b)替換成( ( (a) (b) ) ? (a) : (b

26、) )。6.3 程序的文件結(jié)構(gòu)與編譯預(yù)處理命令4. 條件編譯 一般情況下,源程序中所有的語句都參加編譯,但有時(shí)也希望根據(jù)一定的條件去編譯源文件的不同部分,這就是條件編譯。條件編譯使得同一源程序在不同的編譯條件下得到不同的目標(biāo)代碼。 條件編譯有幾種常用的形式,現(xiàn)分別介紹如下: (1) #if #endif形式 #if #endif形式的條件編譯的格式為: 其中:elif是else if的縮寫,但不可寫成else if。#elif和#else可以省略,但#endif不能省略,它是#if命令的結(jié)尾。#elif命令可以有多個(gè)。if后面的條件必須是一個(gè)常量表達(dá)式,通常會用到宏名,條件可以不加括號() 電

27、子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院#if 條件1 程序段1#elif 條件2 程序段2 .#else 程序段n#endifC+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型 源程序#define USA 0#define CHINA 1#define ENGLAND 2#define ACTIVE_COUNTRY USA#if ACTIVE_COUNTRY = = USAchar *currency = dollar; #elif ACTIVE_COUNTRY = = ENGLANDchar *currency = pound;#els

28、echar *currency = yuan;#endifvoid main ( ) float money; cinmoney; coutmoneycurrencymoney; coutmoneycurrencyendl; 123456789101112131415161718注意: #if和#elif常常與defined命令配合使用 6.3 程序的文件結(jié)構(gòu)與編譯預(yù)處理命令(2) #ifdef #endif #ifdef #endif形式的條件編譯的格式為: 其中:#else可以省略,#endif不能省略,它是#if命令的結(jié)尾。在#ifdef和#else之間可以加多個(gè)#elif命令?!?if

29、def 宏名”的含義是判斷是否定義了宏,它等價(jià)于“#if defined(宏名)”。其作用是:如果宏名已被#define行定義,則編譯程序段1,否則編譯程序段2。 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院#ifdef 宏名 程序段1#else 程序段2#endifC+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型6.3 程序的文件結(jié)構(gòu)與編譯預(yù)處理命令(3) #ifndef #endif #ifndef #endif形式的條件編譯的格式為: 條件編譯呢主要用于下列幾種場合: (1) 避免重復(fù)包含引起變量函數(shù)的重復(fù)定義引起的沖突。如果某個(gè)程序的頭文件中已定義了某個(gè)常量,用條件編譯進(jìn)行判斷后,就不再重新定義該常量,避

30、免造成不一致;如果在頭文件中如果包含某個(gè)模塊,用條件編譯進(jìn)行判斷后,就可不再重復(fù)包含此模塊,避免變量、函數(shù)重名沖突。 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院#ifndef 宏名 程序段1#else 程序段2#endifC+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型注意: 與第2種形式的區(qū)別僅在于:如果宏名沒有被#define定義,則編譯程序段1,否則編譯程序段2。電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型 源程序/* mymath.h */#include using namespace std;#define INTMAXint max(int x,int y) retur

31、n xy?x:y; /* 主程序 */#include using namespace std;#include mymath.h#ifndef INTMAXint max(int x,int y) return xy?x:y;#endifvoid main() coutmax(5,6)endl; 1234567891011121314151617181920212223242526預(yù)編譯處理后的新源程序 #include using namespace std;#include using namespace std;#define INTMAXint max(int x,int y) re

32、turn xy?x:y;void main() coutmax(5,6)endl;解釋:主程序中定義的int max(int,int)在預(yù)處理時(shí)被過濾掉,沒有進(jìn)入編譯,避免了與mymath.h中的int max(int,int)沖突。123456789101112136.3 程序的文件結(jié)構(gòu)與編譯預(yù)處理命令 (2) 便于程序的移植。 如在PC機(jī)上,最常用的C+有BC+、VC+、Linux GNU C+,三者在實(shí)現(xiàn)上有一些不同之處,如果我們希望自己的源程序能夠適應(yīng)這種差異,可以在有差異的地方插入選擇判斷: #ifdef VC+ /visual C+獨(dú)有的內(nèi)容 #endif #ifdef BC+ /

33、Borland C+獨(dú)有的內(nèi)容 #endif #ifdef GC+ /Linux Gnu C+獨(dú)有的內(nèi)容 #endif 如果希望這個(gè)程序在Borland C+環(huán)境下編譯運(yùn)行,可在程序的前面寫上: #define BC+ 這樣一個(gè)源程序只要修改一句就可以適應(yīng)三種C編譯,商業(yè)軟件經(jīng)常就是這樣編寫的。再比方說商業(yè)軟件的版本中經(jīng)常出現(xiàn)的單機(jī)版、網(wǎng)絡(luò)版,其實(shí)網(wǎng)絡(luò)版只是在單機(jī)版的基礎(chǔ)上增加了相應(yīng)的一些網(wǎng)絡(luò)功能,功能上大體相同,所以在同一軟件程序中將單機(jī)版的功能和網(wǎng)絡(luò)版的功能通過條件編譯就可得到相應(yīng)的版本。電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型6.4 名字空間 一個(gè)軟件往往

34、由多個(gè)模塊(組件)組成,這些模塊由不同程序員(軟件商)提供,不同模塊可能使用了相同的標(biāo)識符。簡單說就是同一個(gè)名字在不同模塊中代表不同的事物。當(dāng)這些模塊用到同一個(gè)程序中,同名標(biāo)識符就引起沖突。C+提供名字空間(namespace) 將相同的名字放在不同空間中來防止命名沖突。 定義一個(gè)名字空間的格式如下: 其中:namespace 為關(guān)鍵字。名稱為名字空間標(biāo)識符。成員為函數(shù)、變量、常量、自定義類型等。 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型namespace 名稱 成員; 6.4 名字空間例如: 一個(gè)名為TsingHua的軟件公司為自己的組件建立了一個(gè)名字空間。將

35、它存入頭文件:TsingHua.h電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院/*TsingHua.h*/namespace TsingHua int year=2005; char name=TsingHua Software; ShowName() coutnameendl; C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型6.4 名字空間(1)個(gè)別使用聲明方式,格式如下:其中:為作用域分辨符。成員使用形式包括函數(shù)調(diào)用式、變量名、常量名、類型名等 電子科技大學(xué)計(jì)算機(jī)學(xué)院 軟件學(xué)院C+語言程序設(shè)計(jì)教程 第6章構(gòu)造數(shù)據(jù)類型名字空間名:成員使用形式 /* p6_6.cpp * 名字空間的使用 */#include using namespace std;#include TsingHua.hvoid main() TsingHua:ShowName();/個(gè)別聲明方式 12345678910116.4 名字空間(2)全局聲明方式: 這種方式表明此

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論