版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C+面向?qū)ο蟪绦蛟O(shè)計第一章 C+的初步知識C+ 1- 1 第一第一章章 C+C+的初步知識的初步知識第二章第二章 類和對象類和對象第三章第三章 再論類和對象再論類和對象第四章第四章 運算符重載運算符重載第五章第五章 繼承與派生繼承與派生第六章第六章 多態(tài)性與虛函數(shù)多態(tài)性與虛函數(shù)第七章第七章 輸入輸出流輸入輸出流第八章第八章 C+工具工具C+ 1- 2 C+ 1- 3 總學(xué)時:總學(xué)時:6464講課:講課:4848學(xué)時學(xué)時上機:上機:1616學(xué)時學(xué)時課外上機:每周不少于課外上機:每周不少于4 4學(xué)時學(xué)時C+ 1- 4 C+ 1- 5 /*This is a simple Cpp program*/
2、#include /文件包含文件包含void main( ) /主函數(shù)頭主函數(shù)頭 /主函數(shù)體主函數(shù)體 double x,y; /變量說明變量說明 cout xy ; /輸入數(shù)據(jù)輸入數(shù)據(jù) double z=x+y; /定義并賦值定義并賦值 cout x+y= zendl ; /輸出數(shù)據(jù)輸出數(shù)據(jù)任何變量都必須先說明后使用 Enter two float number: 3 4 Enter two float number: 3 4 x+y=7x+y=7C+ 1- 6 lC語言中,用語言中,用#define 定義常量:定義常量:#define PI 3.14159#define R a+b 它只是在
3、預(yù)編譯時進行它只是在預(yù)編譯時進行字符置換字符置換,將標(biāo)識符置換成表達式或數(shù)字。預(yù)編譯,將標(biāo)識符置換成表達式或數(shù)字。預(yù)編譯后,標(biāo)識符后,標(biāo)識符PI,R不再存在。不再存在。PI,R不是變量,沒有類型,不占用存儲單元,很不是變量,沒有類型,不占用存儲單元,很容易出錯:容易出錯:int a=1;b=2;#define PI 3.14159#define R a+bcoutPI * R * R; 輸出的不是輸出的不是3.14159 * (a+b) * (a+b),而是,而是 3.14159 * a+b * a+b。程序因此出錯。程序因此出錯。C+ 1- 7 lC+進行了改進,用進行了改進,用 const
4、 定義常變量。如:定義常變量。如:const float PI = 3.14159; 它定義了常變量它定義了常變量PI,有數(shù)據(jù)類型,占用存儲單元,有地,有數(shù)據(jù)類型,占用存儲單元,有地址,可以用指針指向它,只是在程序運行中,此變量的值址,可以用指針指向它,只是在程序運行中,此變量的值固定,不能改變。固定,不能改變。l常變量定義時,常變量定義時,const 與指針結(jié)合使用,可以有如下三種與指針結(jié)合使用,可以有如下三種不同的定義:不同的定義:uconst float *ptr = 3.14159; /指向常變量的指針,數(shù)值指向常變量的指針,數(shù)值3.14159不能改變?yōu)槠渌挡荒芨淖優(yōu)槠渌祏floa
5、t const *ptr = 3.14159; /指向變量的常量指針,指指向變量的常量指針,指針地址不能改變針地址不能改變uconst float const *ptr = 3.14159 ; /指向常量的常量指指向常量的常量指針針C+ 1- 8 1.3 函數(shù)原型申明函數(shù)原型申明lC+強制規(guī)定,強制規(guī)定,如果函數(shù)調(diào)用的位置在函數(shù)定義之前,則在如果函數(shù)調(diào)用的位置在函數(shù)定義之前,則在調(diào)用函數(shù)之前必須實現(xiàn)作函數(shù)原型申明。調(diào)用函數(shù)之前必須實現(xiàn)作函數(shù)原型申明。這一點與這一點與C不同,不同,C只是建議,而沒有強制只是建議,而沒有強制l函數(shù)申明的一般形式為:函數(shù)申明的一般形式為: 函數(shù)類型函數(shù)類型 函數(shù)名(
6、參數(shù)表)函數(shù)名(參數(shù)表); l最后的分號可不能忘了,否則出錯!參數(shù)表中可以只指定各最后的分號可不能忘了,否則出錯!參數(shù)表中可以只指定各個參數(shù)的類型,而不指定參數(shù)名!個參數(shù)的類型,而不指定參數(shù)名!C+ 1- 9 函數(shù)申明和定義的示例函數(shù)申明和定義的示例/求圓面積,將函數(shù)申明和定義分開,在調(diào)用函數(shù)前先申明它求圓面積,將函數(shù)申明和定義分開,在調(diào)用函數(shù)前先申明它#include float area( float ); /先申明先申明void main( ) float radius; coutradius; if (radius0) coutarea(radius )endl; /再使用再使用flo
7、at area( float r) /最后定義最后定義 return r * r* 3.14159;C+ 1- 10 程序可以改為如下形式:程序可以改為如下形式:#include float area( float r) return r * r* 3.14159; /先申明先申明main( ) float radius; coutradius; if (radius0) coutarea(radius )”是左移運算符,在是左移運算符,在C+中,有作為輸出算中,有作為輸出算符;而符;而“*”是乘法算符,也是指針符號。這種一個標(biāo)識符有是乘法算符,也是指針符號。這種一個標(biāo)識符有多種含義用途的現(xiàn)象
8、,舊叫多種含義用途的現(xiàn)象,舊叫“重載重載”(overloading)。如果標(biāo)。如果標(biāo)識符為運算符,就叫識符為運算符,就叫“運算符重載運算符重載”;如果標(biāo)識符為函數(shù)名;如果標(biāo)識符為函數(shù)名,就叫,就叫“函數(shù)重載函數(shù)重載”。l什么時候用到重載?什么時候用到重載?用于相類似而又不同的操作用于相類似而又不同的操作。例如,求多個數(shù)值的最大。例如,求多個數(shù)值的最大數(shù),不同類型的參數(shù),數(shù),不同類型的參數(shù),C語言要編寫不同的函數(shù):語言要編寫不同的函數(shù):int max1(int a, int b, int c); / 3個整形數(shù)值求最大值個整形數(shù)值求最大值float max2(float a, float b);
9、 / 2個實形數(shù)值求最大值個實形數(shù)值求最大值long max3(long a, long b, long c); / 3個長整形數(shù)值求最大值個長整形數(shù)值求最大值C+ 1- 12 l而而C+的做法是重載:的做法是重載:將這三個函數(shù)名取相同的名字將這三個函數(shù)名取相同的名字,程序運行時,程序運行時,系統(tǒng)會根據(jù)實際參數(shù)的不同,調(diào)用相近參數(shù)的函數(shù):系統(tǒng)會根據(jù)實際參數(shù)的不同,調(diào)用相近參數(shù)的函數(shù):#include int max(int a, int b, int c) if (ba) a=b; if (ca) a=c; return a; float max(float a, float b) if (b
10、a) a=b; return a;long max(long a, long b, long c) if (ba) a=b; if (ca) a=c; return a; void main( ) int a, b, c, d; float x, y, z; long m, n, p, q; cinabc; cinxy; cinmnp; d = max (a, b, c); cout “int_d = “dendl; z = max (x,y); cout “float_z = “zendl; q = max (m, n, p); cout “l(fā)ong_q = “qendl;Main函數(shù)三次調(diào)
11、用函數(shù)三次調(diào)用max函數(shù),每次實參的個數(shù)或類型不同,系統(tǒng)會尋找函數(shù),每次實參的個數(shù)或類型不同,系統(tǒng)會尋找與之匹配的函數(shù)調(diào)用。與之匹配的函數(shù)調(diào)用。C+ 1- 13 1.5 函數(shù)模板函數(shù)模板l什么時候使用模板什么時候使用模板?重載函數(shù)的不便之處在于,對于同名?重載函數(shù)的不便之處在于,對于同名的函數(shù)要一個一個地編寫,編碼量很大。對于有些相同功的函數(shù)要一個一個地編寫,編碼量很大。對于有些相同功能的函數(shù),如果函數(shù)個數(shù)相同,可以用另外的方法來解決能的函數(shù),如果函數(shù)個數(shù)相同,可以用另外的方法來解決,這就是模板,這就是模板(Template)。l函數(shù)模板的定義形式:函數(shù)模板的定義形式:Template 返回類
12、型返回類型 函數(shù)模板名函數(shù)模板名(數(shù)據(jù)參數(shù)表數(shù)據(jù)參數(shù)表) 函數(shù)模板定義體函數(shù)模板定義體l示例:將上述重載示例改為函數(shù)模板。示例:將上述重載示例改為函數(shù)模板。C+ 1- 14 #include using namespace std; /默認使用默認使用std標(biāo)準(zhǔn)庫名標(biāo)準(zhǔn)庫名template T max (T a, T b, T c) / 建立函數(shù)模板時,只需要建立函數(shù)模板時,只需要 if (ba) a=b; / 將函數(shù)類型、參數(shù)類型將函數(shù)類型、參數(shù)類型 int 換成換成 T 就行。就行。 if (ca) a=c; / 即用虛擬的類型名即用虛擬的類型名T代替實際的類型代替實際的類型 return
13、 a; void main( ) int i = 8, j = 3, k = 4, h; long m = 1, n = 2, p = 3, q; h = max ( i, j, k); q = max ( m, n, p); cout “int_h = “hendl; cout “l(fā)ong_q = “qendl;類型參數(shù)可以有多個:類型參數(shù)可以有多個:template C+ 1- 15 l由此程序可以看到,函數(shù)模板比函數(shù)重載更方便,但由此程序可以看到,函數(shù)模板比函數(shù)重載更方便,但模板只適用于函數(shù)的參數(shù)個數(shù)相同而類型不同,且函模板只適用于函數(shù)的參數(shù)個數(shù)相同而類型不同,且函數(shù)體相同的情況。不滿足
14、這種情況時,就只能使用函數(shù)體相同的情況。不滿足這種情況時,就只能使用函數(shù)重載。數(shù)重載。C+ 1- 16 1.6 有默認參數(shù)的函數(shù)有默認參數(shù)的函數(shù)l背景背景:一般情況下,函數(shù)調(diào)用時,形參從實參那里取得值。因此要求實:一般情況下,函數(shù)調(diào)用時,形參從實參那里取得值。因此要求實參的個數(shù)和類型應(yīng)該與形參相同。但是,有時候,多次調(diào)用同一函數(shù)時參的個數(shù)和類型應(yīng)該與形參相同。但是,有時候,多次調(diào)用同一函數(shù)時用的是同一實參數(shù),或者調(diào)用時還不好確定實參數(shù)。用的是同一實參數(shù),或者調(diào)用時還不好確定實參數(shù)。C+提供一個簡單提供一個簡單的解決辦法,即給參數(shù)一默認值的解決辦法,即給參數(shù)一默認值。這樣當(dāng)不提供實參數(shù)時,形參就
15、用默。這樣當(dāng)不提供實參數(shù)時,形參就用默認參數(shù)作為參數(shù)值。認參數(shù)作為參數(shù)值。l示例示例:有一函數(shù)聲明為:有一函數(shù)聲明為:float area ( float r=6.5 );調(diào)用調(diào)用area 函數(shù)時,如果不提供實際參數(shù)給函數(shù)時,如果不提供實際參數(shù)給r,r 就以默認數(shù)值就以默認數(shù)值 6.5 作為參數(shù)頂用作為參數(shù)頂用area:area ( ); / 相當(dāng)于相當(dāng)于 area (6.5 );l注意注意:1) 當(dāng)有多個參數(shù)時,如果只有部分參數(shù)有默認值,則指定了默認值的參當(dāng)有多個參數(shù)時,如果只有部分參數(shù)有默認值,則指定了默認值的參數(shù)必須放在參數(shù)表的最右邊,否則出錯。因為實參與形參的結(jié)合是從左數(shù)必須放在參數(shù)表
16、的最右邊,否則出錯。因為實參與形參的結(jié)合是從左至右順序進行的,第一個實參必須給第一個形參,第二個實參必須給第至右順序進行的,第一個實參必須給第一個形參,第二個實參必須給第二個形參二個形參。C+ 1- 17 1.6 有默認參數(shù)的函數(shù)有默認參數(shù)的函數(shù)聲明:聲明: void area (float x1, int x2 = 1, char x3 = a);調(diào)用:調(diào)用:area ( 1.2, 3, b); / 形參值全部由實參得到形參值全部由實參得到 area (1.2, 3); / 最后一個參數(shù)取自默認值最后一個參數(shù)取自默認值 area (1.2 ); / 最后兩個參數(shù)取自默認值最后兩個參數(shù)取自默認
17、值 area ( ); / 出錯,第一個形參沒有實參,也沒有出錯,第一個形參沒有實參,也沒有默默 認值認值2) 一個函數(shù)不能既作為重載函數(shù),又作為默認參數(shù)函數(shù)。因為一個函數(shù)不能既作為重載函數(shù),又作為默認參數(shù)函數(shù)。因為當(dāng)調(diào)用函數(shù)時如果少寫一實際個參數(shù),系統(tǒng)無法判斷是利用當(dāng)調(diào)用函數(shù)時如果少寫一實際個參數(shù),系統(tǒng)無法判斷是利用重載函數(shù)還是利用默認參數(shù)函數(shù)。重載函數(shù)還是利用默認參數(shù)函數(shù)。C+ 1- 18 1.7 變量的引用變量的引用(reference)l什么叫引用什么叫引用?變量的引用就是變量的別名。建立引用的作用?變量的引用就是變量的別名。建立引用的作用,是為一個變量另取一個名字,以便在需要的時候間
18、接地引,是為一個變量另取一個名字,以便在需要的時候間接地引用該別名。用該別名。l如何使用引用如何使用引用?假如有一個變量?假如有一個變量a , 想給它另取一個別名想給它另取一個別名b ,可以這樣寫可以這樣寫:int a ;int &b = a; / 聲明聲明b 是一個整形變量的引用變量,并且被初始化為是一個整形變量的引用變量,并且被初始化為au此處此處 & 不代表取地址,只是不代表取地址,只是“引用聲明符引用聲明符”。對一個變量聲明一。對一個變量聲明一個引用,并不另外開辟內(nèi)存空間。個引用,并不另外開辟內(nèi)存空間。b和和a 代表同一個變量單元。代表同一個變量單元。u引用不是獨立的變
19、量,編譯系統(tǒng)不給它分配存儲單元。因此建立引用引用不是獨立的變量,編譯系統(tǒng)不給它分配存儲單元。因此建立引用只有聲明,沒有定義,只是聲明和某一個變量的關(guān)系。只有聲明,沒有定義,只是聲明和某一個變量的關(guān)系。C+ 1- 19 1.7 變量的引用變量的引用(reference)u聲明了一個變量的引用后,在本函數(shù)執(zhí)行期間,該引用一直與代表的聲明了一個變量的引用后,在本函數(shù)執(zhí)行期間,該引用一直與代表的變量相聯(lián)系,不能再作為另一個變量的別名。請看如下示例:變量相聯(lián)系,不能再作為另一個變量的別名。請看如下示例:int a, b ;int &c = a;int &c = b; / 錯誤,錯誤,c
20、已經(jīng)是已經(jīng)是a 的引用,不能再作為另一個變量的引用,不能再作為另一個變量b的引用的引用u引用不是獨立的數(shù)據(jù)類型,它必須與某一種類型的數(shù)據(jù)相聯(lián)系:引用不是獨立的數(shù)據(jù)類型,它必須與某一種類型的數(shù)據(jù)相聯(lián)系:int &x; / 錯誤,錯誤, 沒有指定沒有指定 x 代表哪個變量代表哪個變量C+ 1- 20 l示例:示例:#include using namespace std;void main( ) int a = 10; int &b = a; a = a * a; cout “b = “bendl;運行結(jié)果:運行結(jié)果:b = 1001.7 變量的引用變量的引用(reference)
21、C+ 1- 21 l將引用作為函數(shù)參數(shù)將引用作為函數(shù)參數(shù):C+之所以增加之所以增加“引用引用”,主要是利用它作為函,主要是利用它作為函數(shù)參數(shù),以彌補函數(shù)傳遞參數(shù)的不方便的遺憾。也降低了編程難度。數(shù)參數(shù),以彌補函數(shù)傳遞參數(shù)的不方便的遺憾。也降低了編程難度。u將變量名作為實參將變量名作為實參:這時傳給形參的是變量的值,傳遞是單向的,函:這時傳給形參的是變量的值,傳遞是單向的,函數(shù)運行時,形參發(fā)生變化,并不回傳給實參。因為形參和實參不是同數(shù)運行時,形參發(fā)生變化,并不回傳給實參。因為形參和實參不是同一個存儲單元。請看下面示例:一個存儲單元。請看下面示例:1.7 變量的引用變量的引用(reference
22、)#include void swap ( int a, int b ) int temp; temp = a; a = b; b = temp;void main( ) int i=3, j=5; swap ( i, j ); couti“,”jendl;運行結(jié)果,運行結(jié)果,i, j 仍然是仍然是3,5。沒有發(fā)生交換。沒有發(fā)生交換。C+ 1- 22 u傳遞變量的指針傳遞變量的指針:這時傳給形參的是變量的地址,形參得到一個變量:這時傳給形參的是變量的地址,形參得到一個變量的地址,即形參指針變量指向?qū)崊⒆兞繂卧:瘮?shù)中形參發(fā)生改變,的地址,即形參指針變量指向?qū)崊⒆兞繂卧?。函?shù)中形參發(fā)生改變,實際
23、上是改變實參。實際上是改變實參。這種方法實際上仍然是值傳遞:想指針變量傳遞地址值。然后通過指針這種方法實際上仍然是值傳遞:想指針變量傳遞地址值。然后通過指針變量訪問有關(guān)變量。變量訪問有關(guān)變量?!伴g接地間接地”回傳了改變的變量。請看下面示例:回傳了改變的變量。請看下面示例:1.7 變量的引用變量的引用(reference)#include void swap ( int *p1, int *p2 ) int temp; temp = *p1; *p1 = *p2; *p2 = temp;void main( ) int i=3, j=5; swap ( &i, &j ); cou
24、ti“,”jendl;運行結(jié)果,運行結(jié)果,i, j 是是5,3。變量值發(fā)生交換。變量值發(fā)生交換。C+ 1- 23 u傳遞變量的別名傳遞變量的別名:將變量的引用作為函數(shù)形參,彌補了上面兩種方法:將變量的引用作為函數(shù)形參,彌補了上面兩種方法的不足。請看下面示例:的不足。請看下面示例:注意:注意:swap函數(shù)形參函數(shù)形參&a,&b是指定整形變量的引用作為形參,但是指定整形變量的引用作為形參,但引用誰還沒定。而引用誰還沒定。而main函數(shù)中,用一,函數(shù)中,用一,i, j的名調(diào)用的名調(diào)用swap,就是將,就是將i, j的的名字傳給引用,這樣名字傳給引用,這樣a就成立就成立i的別名,的別名
25、,b就成立就成立j 的別名。的別名。1.7 變量的引用變量的引用(reference)#include void swap ( int &a, int &b ) int temp; temp = a; a = b; b = temp;void main( ) int i=3, j=5; swap ( i, j ); couti“,”jendl;運行結(jié)果,運行結(jié)果,i, j 是是5,3。變量值發(fā)生交換。變量值發(fā)生交換。C+ 1- 24 l如何理解引用?如何理解引用?我們從物理實現(xiàn)上來理解,引用是一個隱性指針,即引我們從物理實現(xiàn)上來理解,引用是一個隱性指針,即引用值是引自所指向的實
26、體。這就是引用的真意。高級編程(面向應(yīng)用)用值是引自所指向的實體。這就是引用的真意。高級編程(面向應(yīng)用)多用引用,低級編程(面向機器)多用指針。多用引用,低級編程(面向機器)多用指針。l對引用的說明對引用的說明:u不能建立不能建立void類型的引用。因為任何實際存在的變量都屬于非類型的引用。因為任何實際存在的變量都屬于非void類類型。型。 void &a = 9; /錯誤錯誤u不能對數(shù)組名進行引用,因為數(shù)組名是首地址本身不占有存儲空間。不能對數(shù)組名進行引用,因為數(shù)組名是首地址本身不占有存儲空間。char c6 = “hello”;char &r =c; /錯誤錯誤u可以建立指
27、針變量的引用:可以建立指針變量的引用:int i=5;int *p= &i; / 定義指針變量定義指針變量p,指向,指向i int * &t = p; / t 是指向整形變量的指針變量的引用,初始化為是指向整形變量的指針變量的引用,初始化為p.1.7 變量的引用變量的引用(reference)C+ 1- 25 u可以將引用的地址賦給指針。此時,指針指向原來變量:可以將引用的地址賦給指針。此時,指針指向原來變量:int a = 3;int &b = a;int *p = &b; / 指針指針p指向變量指向變量a的引用的引用b,相當(dāng)與指向,相當(dāng)與指向au不能定義指向
28、引用類型的指針變量:不能定義指向引用類型的指針變量:int & *p = & a; / 錯誤錯誤u可以用常量或表達式對引用初始化,但必須用可以用常量或表達式對引用初始化,但必須用const限定限定:const int &c = 3; /合法合法1.7 變量的引用變量的引用(reference)C+ 1- 26 l引入原因引入原因:目的是為了解決程序中函數(shù)調(diào)用的目的是為了解決程序中函數(shù)調(diào)用的效率效率問題。問題。函數(shù)調(diào)用時需要建立函數(shù)調(diào)用時需要建立棧棧內(nèi)存環(huán)境,進行參數(shù)傳遞,并產(chǎn)內(nèi)存環(huán)境,進行參數(shù)傳遞,并產(chǎn)生程序執(zhí)行轉(zhuǎn)移,則都要有時間和空間的代價。生程序執(zhí)行轉(zhuǎn)移,則都要有時
29、間和空間的代價。而有時一些函數(shù)代碼很短(行),卻有高使用頻而有時一些函數(shù)代碼很短(行),卻有高使用頻率,造成處理現(xiàn)場的開銷巨增。率,造成處理現(xiàn)場的開銷巨增。這時若將這時若將函數(shù)體嵌入函數(shù)函數(shù)體嵌入函數(shù)調(diào)用處,則可避免每次調(diào)用函調(diào)用處,則可避免每次調(diào)用函數(shù)的開銷,大大提高效率。數(shù)的開銷,大大提高效率。1.8 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)(inline function)C+ 1- 27 1.8 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)(inline function)l在聲明一個函數(shù)時,加上限定詞在聲明一個函數(shù)時,加上限定詞inline,該函數(shù)就成為內(nèi)聯(lián)函,該函數(shù)就成為內(nèi)聯(lián)函數(shù)。編譯時,系統(tǒng)將調(diào)用此函數(shù)的地方用函數(shù)的原代碼替換數(shù)。
30、編譯時,系統(tǒng)將調(diào)用此函數(shù)的地方用函數(shù)的原代碼替換。即以空間代價換取時間。例如:。即以空間代價換取時間。例如:#include inline int power(int x ) / 定義一個內(nèi)聯(lián)函數(shù)定義一個內(nèi)聯(lián)函數(shù) return x*x; void main( ) cout power ( 2 ) endl; / 編譯系統(tǒng)展開為編譯系統(tǒng)展開為x=2;x*x; cout power ( 1+2 ) endl; / 編譯系統(tǒng)展開為編譯系統(tǒng)展開為x=1+2;x*x;運行結(jié)果:運行結(jié)果:49C+ 1- 28 l內(nèi)聯(lián)函數(shù)還有內(nèi)聯(lián)函數(shù)還有限制限制:u函數(shù)內(nèi)不能含有循環(huán)結(jié)構(gòu)或函數(shù)內(nèi)不能含有循環(huán)結(jié)構(gòu)或switc
31、h結(jié)構(gòu);結(jié)構(gòu);u不能含有任何靜態(tài)數(shù)據(jù)及數(shù)組聲明。不能含有任何靜態(tài)數(shù)據(jù)及數(shù)組聲明。u不能是遞歸函數(shù)。不能是遞歸函數(shù)。1.8 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)(inline function)C+ 1- 29 l標(biāo)識符只能在說明它或定義它的范圍內(nèi)是可見的,標(biāo)識符只能在說明它或定義它的范圍內(nèi)是可見的,而在該范圍之外是不可見的。而在該范圍之外是不可見的。l大多數(shù)標(biāo)識符的說明與定義是一致的,只有少數(shù)例大多數(shù)標(biāo)識符的說明與定義是一致的,只有少數(shù)例外。如:函數(shù)等。外。如:函數(shù)等。l范圍有大有小。最大為整個程序,最小為塊,中間范圍有大有小。最大為整個程序,最小為塊,中間有文件和函數(shù)。有文件和函數(shù)。l每一個變量都有自己的有效范
32、圍。我們只能在變量的作用域每一個變量都有自己的有效范圍。我們只能在變量的作用域內(nèi)使用該變量。內(nèi)使用該變量。不能直接使用其它作用域中的變量不能直接使用其它作用域中的變量。如果要。如果要使用其它作用域中的同名變量,必須使用使用其它作用域中的同名變量,必須使用“作用域運算符作用域運算符”,即,即“:”。1.9 作用域運算符作用域運算符C+ 1- 30 請看示例:請看示例:#include float a=1.5;void main( ) int a = 5; cout a endl; / 輸出作用域為輸出作用域為main 函數(shù)的局部變量函數(shù)的局部變量a 的值的值 cout :a endl; / 輸出
33、作用域為全局的輸出作用域為全局的 全局變量全局變量a 的值的值運行結(jié)果:運行結(jié)果:5 1.5 注意:不能用作用域運算符注意:不能用作用域運算符“:”訪問函數(shù)中的局部變量。訪問函數(shù)中的局部變量。1.9 作用域運算符作用域運算符C+ 1- 31 C+ 1- 32 #includeint i(5); /外部全局變量外部全局變量extern void func( ) cout iendl; void main() int i=3; / 內(nèi)部局部變量內(nèi)部局部變量 func( ); cout iendl; 局部變量全局變量藍色為文件作用域綠色為函數(shù)作用域C+ 1- 33 1.10 字符串變量字符串變量C+
34、除了可以使用除了可以使用C語言提供的字符型變量和字符型數(shù)組外,還提供語言提供的字符型變量和字符型數(shù)組外,還提供了字符串類。這種類可以定義字符串對象。但在文件開頭必須包含了字符串類。這種類可以定義字符串對象。但在文件開頭必須包含string庫:庫:#include l字符串定義字符串定義:string s1; / 定義字符串變量定義字符串變量s1string s2 = “China”; / 定義字符串變量定義字符串變量s2并初始化并初始化l字符串賦值字符串賦值:可以對定義了的字符串變量進行賦值:可以對定義了的字符串變量進行賦值:s1 = “Hello”;s2 = s1;s3 = s1+s2; / 字符串連接字符串連接l字符串變量的輸入輸出字符串變量的輸入輸出:string c1;cin c1;cout =,= 來進行字符串的比較來進
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 請?zhí)?寫作課件
- 愛蓮說精簡課件
- 2024-2025學(xué)年初中同步測控優(yōu)化設(shè)計物理八年級下冊配人教版第9章 第3節(jié) 大氣壓強含答案
- 第三單元(復(fù)習(xí))-三年級語文上冊單元復(fù)習(xí)(統(tǒng)編版)
- 2024年黑龍江省綏化市中考地理真題卷及答案解析
- 西京學(xué)院《運營管理》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《隨機過程與數(shù)理統(tǒng)計》2021-2022學(xué)年第一學(xué)期期末試卷
- 高質(zhì)量專題教學(xué)模板
- 中班語言我想
- 西京學(xué)院《程序設(shè)計基礎(chǔ)》2021-2022學(xué)年期末試卷
- 門診科室醫(yī)院感染預(yù)防與控制制度
- 廣告宣傳物料投標(biāo)方案(技術(shù)方案)
- 天津市一中2024-2025學(xué)年高一語文上學(xué)期期中試題含解析
- 小紅書種草營銷師認證考試題附有答案
- DB43 3001-2024 工業(yè)廢水高氯酸鹽污染物排放標(biāo)準(zhǔn)
- 包裝飲用水生產(chǎn)風(fēng)險清單范例
- 當(dāng)代社會政策分析 課件 第二章 就業(yè)社會政策
- GB/T 19633.2-2024最終滅菌醫(yī)療器械包裝第2部分:成型、密封和裝配過程的確認的要求
- 信息技術(shù)知識點
- 小班幼兒優(yōu)勢分析總結(jié)與反思
- 養(yǎng)老機構(gòu)照護機構(gòu)長期護理服務(wù)安全風(fēng)險評估、風(fēng)險防范記錄表1-3-5
評論
0/150
提交評論