C程序的設(shè)計基礎(chǔ)知識_第1頁
C程序的設(shè)計基礎(chǔ)知識_第2頁
C程序的設(shè)計基礎(chǔ)知識_第3頁
C程序的設(shè)計基礎(chǔ)知識_第4頁
C程序的設(shè)計基礎(chǔ)知識_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、c+程序設(shè)計c+c+基礎(chǔ)知識基礎(chǔ)知識第第2章章 c+基礎(chǔ)知識基礎(chǔ)知識 本章學(xué)習(xí)要點本章學(xué)習(xí)要點從c程序到c+程序的發(fā)展歷程簡單的c+程序c+的輸入輸出、數(shù)據(jù)類型、函數(shù)及指針c+的常變量、引用、名字空間、字符串變量c+程序的編寫和實現(xiàn)第第2章章 c+基礎(chǔ)知識基礎(chǔ)知識本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo)了解從c程序到c+程序的發(fā)展歷程對簡單的c+程序有整體的感性認識掌握c+對c的擴充掌握c+的輸入輸出、數(shù)據(jù)類型、函數(shù)及指針掌握c+的常變量、引用、名字空間、字符串變量熟悉c+程序的編寫和實現(xiàn)流程2.1 從c到c+c+3.0c+2.0c+1.0帶類的帶類的ccc+4.0ansi c+89年,增加類的多繼承91年,

2、增加模板增加異常處理、名字空間、運行時類型識別97年,成為標(biāo)準(zhǔn)2.2 簡單c+程序v通過簡單的通過簡單的c+例子認識例子認識c+程序程序 【例2-1】在屏幕上輸出一行字符“hello c+!”。/=#include /包含頭文件命令using namespace std;/使用名字空間stdint main()couthello c+!endl; /輸出字符串到屏幕return 0; /main函數(shù)返回0至操作系統(tǒng)/=注意:標(biāo)準(zhǔn)c+程序和c程序的不同 :main函數(shù)的返回值為整型 使用cout輸出及需要用到的頭文件iostream 名字空間2.2 簡單c+程序c+的函數(shù)和c語言的函數(shù)非常相似

3、函數(shù)的使用仍然需要先聲明后使用。如果函數(shù)定義在函數(shù)調(diào)用之后,則必須在前面聲明函數(shù)原型【例2-2】通過函數(shù)求兩個整數(shù)a和b的和。/=#include /包含頭文件命令using namespace std;/使用名字空間stdint sum(int x, int y) return x + y; /求和的函數(shù)int main()int a,b; /定義兩個變量a和bcoutinput to a and b: ab; /等待用戶從鍵盤輸入數(shù)據(jù)couta+b=sum(a, b)endl;/輸出結(jié)果信息至屏幕return 0;/main函數(shù)返回0至操作系統(tǒng)/=2.2 簡單c+程序【例2-3】聲明一個關(guān)

4、于人的類person,人的信息包括姓名、性別、年齡,人可以輸入自己的信息,也可以顯示自己的信息。#include /包含頭文件命令using namespace std;/使用名字空間stdclass person/類的聲明public:/以下為類的公用成員函數(shù)void setinfo()/公用成員函數(shù)setinfo coutnamesexage; /輸入數(shù)據(jù)至私有數(shù)據(jù)成員void show()/公用成員函數(shù)show cout name : name; /輸出私有成員name的值cout sex: sex;/輸出私有成員sex的值cout age: age、運算符運算符2.3.2 數(shù)據(jù)類型的擴

5、展基本基本類型類型空類型空類型指針指針類型類型構(gòu)造構(gòu)造類型類型c+數(shù)據(jù)類型整型、字符型整型、字符型浮點型浮點型布爾型布爾型枚舉、數(shù)組枚舉、數(shù)組結(jié)構(gòu)體、共用體結(jié)構(gòu)體、共用體類類2.3.3 用const定義常變量v直接常量和符號常量直接常量和符號常量v符號常量的缺點符號常量的缺點 運行時不分配內(nèi)存單元運行時不分配內(nèi)存單元 符號常量沒有類型,在編譯時不進行類型檢查符號常量沒有類型,在編譯時不進行類型檢查 替換后的表達式和預(yù)想的表達式是否一致替換后的表達式和預(yù)想的表達式是否一致v為了使常量也能像變量那樣進行類型檢查,為了使常量也能像變量那樣進行類型檢查,c+提供了用提供了用const定義常變量的方法定

6、義常變量的方法v定義常變量的語法:定義常變量的語法:const 類型類型 變量名變量名;2.3.3 用const定義常變量【例2-4】利用常變量計算圓的面積。/=#include using namespace std;int main() const float pi = 3.14; /定義常變量float radius = 0;coutradius;coutthe area of circle is: pi*radius*radiusendl;return 0;/=注意注意const的位置,一般見到的的位置,一般見到的const的位置可能在類型的前面,但是的位置可能在類型的前面,但是con

7、st也可以在變量名前面,并且兩者的含義完全相同。也可以在變量名前面,并且兩者的含義完全相同。2.3.4 指針v指針的概念指針的概念 指針是一個重要概念,如果使用得當(dāng)可以使程指針是一個重要概念,如果使用得當(dāng)可以使程序高效、簡潔、緊湊。如果對指針掌握不牢固,序高效、簡潔、緊湊。如果對指針掌握不牢固,編程則會出現(xiàn)意想不到的錯誤編程則會出現(xiàn)意想不到的錯誤 指針是內(nèi)存單元的地址指針是內(nèi)存單元的地址 經(jīng)常所講的指針是指針變量的簡稱,是用來存經(jīng)常所講的指針是指針變量的簡稱,是用來存放指針(地址)的變量。放指針(地址)的變量。 v本節(jié)重點討論本節(jié)重點討論c+中使用指針需要注中使用指針需要注意的地方意的地方 2

8、.3.4.1 指針與0v空指針空指針 空指針表示空指針表示“未分配未分配”或者或者“尚未指向尚未指向任何地方任何地方”的指針的指針 空指針一般用來判斷內(nèi)存分配是否成功空指針一般用來判斷內(nèi)存分配是否成功 注意:注意:“空指針空指針”與與“野指針野指針”的區(qū)別的區(qū)別 在指針上下文中的常數(shù)在指針上下文中的常數(shù)0被編譯成空指針被編譯成空指針 程序員更常使用符號常量程序員更常使用符號常量null來表示空來表示空指針指針 2.3.4.1 指針與0【例2-5】指針和0/=#include using namespace std;int main()int *p = 0; /定義空指針pint *q; /定義

9、野指針qint x = 100; /定義整型變量x并初始化為100/*p = 50; /若執(zhí)行則編譯出錯,不能使用空指針*q = 50; /編譯通過,但不知把50寫到何處p = q = &x; /使指針p和q都指向變量xif(p!= 0) /判斷指針p是否為空指針cout*p *qendl; /輸出變量x的值/=注意注意編程時養(yǎng)成定義指針時初始化為空指針,使用指針時判斷是否為空指針的好習(xí)慣,可以減少程序中指針的許多錯誤。2.3.4.2 指針與const【例2-6】指向const變量的指針。/=#include using namespace std;int main() const i

10、nt *p = null; /定義指向const變量的指針pconst int a = 10 ; /定義常變量ap = &a; /指針p指向acout*p = *pendl; /輸出p所指向單元的內(nèi)容int b = 100; /定義普通變量bp = &b; /指針p指向bcout*p = *pendl; /輸出p所指向單元的內(nèi)容/*p = 200; /錯誤,不能通過p修改p所指向單元內(nèi)容b = 200;cout*p = *pendl; /輸出p所指向單元的內(nèi)容return 0;/=通過本例可以看到可以改變指向const變量的指針的指向,但是不能通過指針修改指針指向單元內(nèi)容2.3

11、.4.2 指針與const通過本例可以看到可以改變const指針指向單元的內(nèi)容,但是不能改變const指針的指向?!纠?-7】const指針。/=#include using namespace std;int main() int a = 10 ; /定義普通變量aint b = 100; /定義普通變量bint * const p = &a; /定義const指針p并初始化指向acout*p = *pendl; /輸出p所指向單元內(nèi)容/p = &b; /錯誤,不能改變const指針p的指向*p = 100; /通過指針修改p所指向單元內(nèi)容cout*p = *pendl; /

12、輸出p所指向單元內(nèi)容return 0;/=2.3.4.2 指針與const對于指向const變量的const指針,既不能改變指針指向單元的內(nèi)容,也不能改變指針的指向。【例2-8】指向const變量的const指針。/=#include using namespace std;int main() int a = 10 ;int b = 100;const int * const p = &a; /定義指向const變量的const指針pcout*p = *pendl; /輸出p所指向單元內(nèi)容/p = &b; /錯誤,不能改變指針p的指向/*p = 100; /錯誤,不能改變p所

13、指向單元的內(nèi)容return 0;/=2.3.4.2 指針與constv小結(jié)小結(jié)指針和指針和const的關(guān)系比較復(fù)雜,的關(guān)系比較復(fù)雜,const有兩個位置,可形成三種指針:有兩個位置,可形成三種指針: 1.只在只在“*”之前有之前有const的指針,稱為指的指針,稱為指向向const變量的指針;變量的指針; 2.只在只在“*”之后有之后有const的指針,稱為的指針,稱為const指針;指針; 3.“*”前后都有前后都有const的指針,稱為指向的指針,稱為指向const變量的變量的const指針。指針。2.3.4.3 void指針vvoid在作為函數(shù)類型和參數(shù)類型時為在作為函數(shù)類型和參數(shù)類型時

14、為空類型,表示沒有返回值或參數(shù)??疹愋?,表示沒有返回值或參數(shù)。vvoid修飾指針時稱為修飾指針時稱為“無類型指針無類型指針”,表示該指針可以指向任意類型的變量。表示該指針可以指向任意類型的變量。v雖然雖然void指針可以指向任意類型的數(shù)指針可以指向任意類型的數(shù)據(jù),但是在使用據(jù),但是在使用void指針時必須對其指針時必須對其進行強制類型轉(zhuǎn)換成它所指向單元的進行強制類型轉(zhuǎn)換成它所指向單元的實際類型,然后才可以使用實際類型,然后才可以使用 2.3.4.3 void指針【例2-9】void指針的聲明與使用。/=#include using namespace std;int main() int x

15、= 100; void *p = &x; /定義void指針p指向x int *q = null; /定義整型指針q /cout*p = *pendl; /錯誤,非法使用指針p cout*p = *(int *)pendl; /正確,輸出p指向單元內(nèi)容 /q = p; /錯誤,非法,void指針賦給整型指針 q = (int *)p; /正確,合法,void指針賦給整型指針 cout*q = *qendl; /輸出指針q指向單元內(nèi)容 return 0;/=2.3.4.3 void指針v為什么要使用為什么要使用void指針指針 因為因為void指針可以指向任意類型的數(shù)據(jù),指針可以指向任意

16、類型的數(shù)據(jù),所以使用所以使用void指針時把指針時把void指針?biāo)赶蛑羔標(biāo)赶虻臄?shù)據(jù)給抽象化了,這樣可以增加程序的數(shù)據(jù)給抽象化了,這樣可以增加程序的通用性的通用性 v使用使用void指針的兩個例子指針的兩個例子void * memcpy(void *dest, const void *src, size_t len); void * malloc(unsigned int size);2.3.4.4 new和deletevc語言的動態(tài)內(nèi)存管理語言的動態(tài)內(nèi)存管理 malloc()和和free()函數(shù)函數(shù) 主要缺點主要缺點函數(shù)的返回值是函數(shù)的返回值是voidvoid* *類型類型 分配內(nèi)存單元時

17、根據(jù)參數(shù)分配內(nèi)存單元時根據(jù)參數(shù)sizesize的值來分配,的值來分配,無法檢查錯誤無法檢查錯誤分配到的內(nèi)存單元無法初始化分配到的內(nèi)存單元無法初始化vc+中使用中使用new和和delete運算進行動運算進行動態(tài)內(nèi)存管理態(tài)內(nèi)存管理2.3.4.4 new和delete【例2-11】使用new和delete動態(tài)管理內(nèi)存單元。/=#include using namespace std;int main() int *p = null; /定義整型指針p p = new int; /用new申請可以存放一個整型數(shù)據(jù)的內(nèi)存單元 cout*p = *pendl; /輸出指針p指向單元的內(nèi)容 delete p

18、; /delete釋放指針p指向內(nèi)存單元 return 0;/=2.3.4.4 new和deletev申請內(nèi)存空間并進行初始化申請內(nèi)存空間并進行初始化 指針變量指針變量 = new 數(shù)據(jù)類型數(shù)據(jù)類型(初值初值); v分配多個連續(xù)變量的存儲空間分配多個連續(xù)變量的存儲空間 使用使用new 和和delete 指針變量指針變量 = new = new 數(shù)據(jù)類型數(shù)據(jù)類型 元素個數(shù)元素個數(shù); ; delete delete 指針變量指針變量; ; :兼容兼容c語言的語言的malloc/free方式方式,單個變量的單個變量的new/delete方式方式,多個變量的多個變量的new /delete 方式方式

19、2.3.5 引用v引用就是某一變量的別名,對引用的引用就是某一變量的別名,對引用的操作與對變量直接操作完全一樣操作與對變量直接操作完全一樣 v引用的聲明方法引用的聲明方法 類型標(biāo)識符類型標(biāo)識符 &引用名引用名 = 目標(biāo)變量名目標(biāo)變量名;“&”運算符在變量的前面表示取地址運算,在賦值運算任的左側(cè)是引用運算符,這種在不同的上下文環(huán)境中具有不同含義的現(xiàn)象,稱之為運算符功能重載。2.3.5 引用【例2-12】使用引用訪問變量。/=#include using namespace std;int main() int x = 100; /定義整型變量x int &rx = x;/

20、定義變量x的引用rx coutrx = rxendl;/輸出引用rx的內(nèi)容 rx = 200;/給引用rx賦值 coutx = xendl;/輸出變量x的內(nèi)容 return 0;/=程序執(zhí)行后運行的結(jié)果如下:rx = 100 x = 2002.3.5 引用【例2-13】編寫一個函數(shù),交換兩個整型變量的值。/=#include using namespace std;void swap(int &x, int &y) /定義swap函數(shù)用來交換兩個變量int tmp;tmp = x; x = y; y = tmp;int main()int x = 10, y = 20;cout

21、交換前:x = x, y = yendl;swap(x,y); /調(diào)用swap函數(shù)進行交換cout交換后:x = x, y = yendl; return 0;/=通過函數(shù)交換兩通過函數(shù)交換兩個變量的值有三種形個變量的值有三種形式:值傳遞、地址傳式:值傳遞、地址傳遞和引用傳遞。其中遞和引用傳遞。其中值傳遞不能實現(xiàn)交換值傳遞不能實現(xiàn)交換的目的,引用傳遞和的目的,引用傳遞和地址傳遞都可以實現(xiàn)地址傳遞都可以實現(xiàn),但引用傳遞的形式更但引用傳遞的形式更簡單。簡單。2.3.5 引用v引用和引用和const 可以用可以用const對引用加以限制,不允許改對引用加以限制,不允許改變該引用的值變該引用的值 co

22、nst引用和語法引用和語法const const 類型標(biāo)識符類型標(biāo)識符 & &引用名引用名 = = 目標(biāo)變量名目標(biāo)變量名; ; 利用常引用作為函數(shù)形參,既能提高程利用常引用作為函數(shù)形參,既能提高程序的執(zhí)行效率,又能保護傳遞給函數(shù)的序的執(zhí)行效率,又能保護傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變,達到保護實參數(shù)據(jù)不在函數(shù)中被改變,達到保護實參的目的的目的 2.3.5 引用v引用作為函數(shù)的返回值引用作為函數(shù)的返回值 【例2-14】引用作為函數(shù)的返回值。#include using namespace std;int &max(int &x, int &y) /此函數(shù)的

23、返回值為對參數(shù)x和y中大的那個變量的引用 return (xy)?x:y; int main() int a=2,b=3;couta= a b= b endl;max(a,b)=4; couta= a b= b endl; return 0;由于函數(shù)的返回值為引用類型,所以可以為函數(shù)賦值,為函數(shù)賦的值賦給兩個參數(shù)中的大者,所以a的值為2,b的值為42.3.6 函數(shù)v面向過程的面向過程的c+程序中的函數(shù)與程序中的函數(shù)與c語言語言中的函數(shù)基本相同中的函數(shù)基本相同v面向?qū)ο蟮拿嫦驅(qū)ο蟮腸+程序中的函數(shù)有成員程序中的函數(shù)有成員函數(shù)和公共函數(shù)之分函數(shù)和公共函數(shù)之分v主要討論面向過程的主要討論面向過程的c

24、+程序中函數(shù)程序中函數(shù)與與c語言函數(shù)的區(qū)別語言函數(shù)的區(qū)別2.3.6.1 函數(shù)原型聲明v在函數(shù)尚未定義的情況下,先將函數(shù)在函數(shù)尚未定義的情況下,先將函數(shù)的形式告訴編譯系統(tǒng),以便編譯能夠的形式告訴編譯系統(tǒng),以便編譯能夠正常進行正常進行 v函數(shù)原型聲明的語法形式有兩種:函數(shù)原型聲明的語法形式有兩種:(1)返回值類型 函數(shù)名(參數(shù)類型1, 參數(shù)類型2, .);(2)返回值類型 函數(shù)名(參數(shù)類型1 參數(shù)名1, 參數(shù)類型2 參數(shù)名2, .);函數(shù)原型聲明和函數(shù)定義是不同的。函數(shù)原型聲明不是一個獨立的完整的函數(shù)單位,它僅僅是一條語句,因此在函數(shù)原型聲明后面一定要加上分號。2.3.6.2 函數(shù)默認參數(shù)v在多次

25、調(diào)用一個函數(shù)將實參傳遞給形在多次調(diào)用一個函數(shù)將實參傳遞給形參時,其中可能有一個或幾個參數(shù),參時,其中可能有一個或幾個參數(shù),它們傳遞進來的實參值多次相同它們傳遞進來的實參值多次相同v在定義或聲明函數(shù)時,給形參一個默在定義或聲明函數(shù)時,給形參一個默認值,如果在調(diào)用時沒有給該形參傳認值,如果在調(diào)用時沒有給該形參傳遞實參值,則使用默認值作為該形參遞實參值,則使用默認值作為該形參的值;如果調(diào)用時給該形參傳遞了實的值;如果調(diào)用時給該形參傳遞了實參值,則使用實參的值作為該形參的參值,則使用實參的值作為該形參的值。值。 2.3.6.2 函數(shù)默認參數(shù)【例2-16】求兩個或三個正整數(shù)中的最大值,使用帶有默認參數(shù)的

26、函數(shù)實現(xiàn)。/=#include using namespace std;int main() int max(int,int,int = 0);/帶有默認參數(shù)的函數(shù)原型聲明int a = 5,b = 8,c = 10;coutmax of a and b is:max(a,b)endl;/調(diào)用默認參數(shù)的函數(shù)coutmax of a, b and c is:max(a,b,c)endl;return 0;int max(int a, int b, int c = 0) /定義帶有默認參數(shù)的函數(shù) if(a b) a = b;if(a c) a = c;return a;/=2.3.6.2 函數(shù)默認

27、參數(shù)調(diào)用帶有默認參數(shù)的函數(shù)時,實參的個數(shù)可以與形參的個數(shù)不同,對于實參未給出的,可以從形參的默認值中獲得,利用這一特性,可以使函數(shù)的使用更加靈活。2.3.6.3 函數(shù)與引用v函數(shù)的參數(shù)是引用函數(shù)的參數(shù)是引用 當(dāng)使用引用作為函數(shù)的形參時,引用不當(dāng)使用引用作為函數(shù)的形參時,引用不是一個單獨的變量,不需要在內(nèi)存中分是一個單獨的變量,不需要在內(nèi)存中分配存儲單元,實參向形參傳遞的是變量配存儲單元,實參向形參傳遞的是變量的名字,而不是變量的地址。使用引用的名字,而不是變量的地址。使用引用作為函數(shù)的形參可以部分代替指針,降作為函數(shù)的形參可以部分代替指針,降低了程序的復(fù)雜度,提高了程序的執(zhí)行低了程序的復(fù)雜度,

28、提高了程序的執(zhí)行效率,同時也提高了程序的可讀性。效率,同時也提高了程序的可讀性。 v函數(shù)的返回值是引用函數(shù)的返回值是引用 2.3.6.4 函數(shù)與constvconst修飾函數(shù)的參數(shù)修飾函數(shù)的參數(shù) 調(diào)用函數(shù)時用相應(yīng)的值初始化調(diào)用函數(shù)時用相應(yīng)的值初始化const常量常量 函數(shù)體按照函數(shù)體按照const所修飾部分進行常量化所修飾部分進行常量化 vconst修飾函數(shù)的返回值修飾函數(shù)的返回值 用于二目操作符重載函數(shù)并產(chǎn)生新對象用于二目操作符重載函數(shù)并產(chǎn)生新對象vconst修飾整個函數(shù)修飾整個函數(shù) 這種情況發(fā)生在類的成員函數(shù)時這種情況發(fā)生在類的成員函數(shù)時 const的位置放在函數(shù)參數(shù)表的后面的位置放在函數(shù)

29、參數(shù)表的后面 2.3.6.5 函數(shù)重載v一般情況下,一個函數(shù)名對應(yīng)一個功能一般情況下,一個函數(shù)名對應(yīng)一個功能 v特殊情況下,一個函數(shù)名對應(yīng)多個功能特殊情況下,一個函數(shù)名對應(yīng)多個功能 功能是非常類似功能是非常類似 參數(shù)不同參數(shù)不同【例2-18】使用add為函數(shù)名定義整數(shù)的加法和兩個浮點數(shù)的加法int add(int a,int b) /整數(shù)加法的add函數(shù)定義coutcall integer add function. endl;return a+b;float add(float a,float b) /浮點數(shù)加法的add函數(shù)定義coutcall float add function. end

30、l;return a + b;2.3.6.5 函數(shù)重載函數(shù)重載需要函數(shù)參數(shù)的類型或個數(shù)必須至少有其函數(shù)重載需要函數(shù)參數(shù)的類型或個數(shù)必須至少有其中之一不同,函數(shù)返回值類型可以相同也可以不同。但中之一不同,函數(shù)返回值類型可以相同也可以不同。但是,不允許參數(shù)的個數(shù)和類型都相同而只有返回值類型是,不允許參數(shù)的個數(shù)和類型都相同而只有返回值類型不同。從語法上來說,可以讓兩個或多個完全不相干的不同。從語法上來說,可以讓兩個或多個完全不相干的函數(shù)使用相同的函數(shù)名,進行重載,但是這樣做使得程函數(shù)使用相同的函數(shù)名,進行重載,但是這樣做使得程序的可讀性下降,不建議這樣做。使用同名函數(shù)進行重序的可讀性下降,不建議這樣

31、做。使用同名函數(shù)進行重載時,重載函數(shù)在功能上應(yīng)該相近或?qū)儆谕活惡瘮?shù)。載時,重載函數(shù)在功能上應(yīng)該相近或?qū)儆谕活惡瘮?shù)。2.3.6.6 內(nèi)置函數(shù)v調(diào)用函數(shù)時系統(tǒng)需要一定的時間和空調(diào)用函數(shù)時系統(tǒng)需要一定的時間和空間的開銷間的開銷 v當(dāng)函數(shù)體很小而又需要頻繁調(diào)用時當(dāng)函數(shù)體很小而又需要頻繁調(diào)用時,運運行效率與代碼重用的矛盾變得很突出行效率與代碼重用的矛盾變得很突出 v系統(tǒng)在編譯時將所調(diào)用的內(nèi)置函數(shù)的系統(tǒng)在編譯時將所調(diào)用的內(nèi)置函數(shù)的代碼直接嵌入到主調(diào)函數(shù)中代碼直接嵌入到主調(diào)函數(shù)中 v執(zhí)行時就不會發(fā)生函數(shù)調(diào)用,而是順執(zhí)行時就不會發(fā)生函數(shù)調(diào)用,而是順序執(zhí)行序執(zhí)行 2.3.6.6 內(nèi)置函數(shù)【例2-20】將函數(shù)

32、聲明為內(nèi)置函數(shù)。/=#include using namespace std;int main()int x = 3, y = 5;int s;inline int add(int a, int b);/內(nèi)置函數(shù)原型s = add(x,y);/調(diào)用函數(shù)add couts = sendl; return 0;inline int add(int a,int b) return a+b; /定義內(nèi)置函數(shù)add/=2.3.6.6 內(nèi)置函數(shù)2.3.7 名字空間v1.為什么需要名字空間為什么需要名字空間 引用名字空間的概念就是為了解決程序引用名字空間的概念就是為了解決程序中名字沖突的問題中名字沖突的問題

33、 v2.什么是名字空間什么是名字空間 所謂名字空間就是一個由程序設(shè)計者命所謂名字空間就是一個由程序設(shè)計者命名的內(nèi)存區(qū)域名的內(nèi)存區(qū)域 根據(jù)需要指定一些有名字的空間域,把根據(jù)需要指定一些有名字的空間域,把一些全局標(biāo)識符放在各個名字空間中,一些全局標(biāo)識符放在各個名字空間中,從而避免與其他同名的全局標(biāo)識符混淆從而避免與其他同名的全局標(biāo)識符混淆 2.3.7 名字空間v3.如何使用名字空間如何使用名字空間 定義名字空間時,語法如下:定義名字空間時,語法如下: 其中成員的類型包括:常量、變量、函其中成員的類型包括:常量、變量、函數(shù)、結(jié)構(gòu)體、類、模板等,還可以是名數(shù)、結(jié)構(gòu)體、類、模板等,還可以是名字空間字空間

34、 namespace 名字空間名 定義成員2.3.7 名字空間定義名字空間舉例:namespace ns const int rate = 0.08; double money; double tax() return money * rate; namespace ns2 int count; 如果要訪問名字空間ns中的成員,可以采用名字空間:成員名的方法,如ns:rate、ns:money、ns:tax()、ns:ns2:count等 可以看到,在訪問名字空間的成員時可能需要寫很長的一串名字,使用時不太方便,為此c+提供了一些簡化機制2.3.7 名字空間訪問名字空間中成員的簡化機制:訪問名

35、字空間中成員的簡化機制: (1)使用名字空間的別名使用名字空間的別名 namespace information . 可以用一個較短的縮寫作為別名來代替它。如:可以用一個較短的縮寫作為別名來代替它。如:namespace info = information;(2)使用使用using名字空間的成員名名字空間的成員名 如:如:using ns:tax;后面訪問后面訪問tax()時就相當(dāng)于時就相當(dāng)于ns:tax()(3)使用使用using namespace名字空間名名字空間名 如:如:using namespace ns;這樣在這樣在using namespace聲明的作用域中,名字空間聲明的作

36、用域中,名字空間ns中的成員就好中的成員就好像在全局域聲明一樣,可以直接使用而不必加名字空間名限定像在全局域聲明一樣,可以直接使用而不必加名字空間名限定2.3.7 名字空間v4.無名的名字空間無名的名字空間 沒有名字的名字空間沒有名字的名字空間 由于沒有名字空間名,在別的文件中無由于沒有名字空間名,在別的文件中無法訪問,它只能在本文件的作用域內(nèi)有法訪問,它只能在本文件的作用域內(nèi)有效。相當(dāng)于將無名名字空間的成員的作效。相當(dāng)于將無名名字空間的成員的作用域限制在本文件內(nèi)用域限制在本文件內(nèi) 。namespace void func() coutfunc in noname namespace!endl

37、; 2.3.7 名字空間v5.標(biāo)準(zhǔn)名字空間標(biāo)準(zhǔn)名字空間std c+系統(tǒng)將標(biāo)準(zhǔn)系統(tǒng)將標(biāo)準(zhǔn)c+庫中的所有標(biāo)識符都庫中的所有標(biāo)識符都放在名為放在名為std的名字空間中定義,即系統(tǒng)的名字空間中定義,即系統(tǒng)預(yù)定義的頭文件中的函數(shù)、類、對象和預(yù)定義的頭文件中的函數(shù)、類、對象和類模板都是在名字空間類模板都是在名字空間std中定義的中定義的 一旦使用了名字空間一旦使用了名字空間std,就必須保證在,就必須保證在程序中不再定義與名字空間中已經(jīng)出現(xiàn)程序中不再定義與名字空間中已經(jīng)出現(xiàn)的標(biāo)識符同名的量。例如在程序中不能的標(biāo)識符同名的量。例如在程序中不能再定義名為再定義名為cin或或cout的對象。的對象。 2.3.8 字符串變量vc語言對字符串的處理語言對字符串的

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論