




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第2章章 從從C到到C+第第2章章 C+在非面向?qū)ο蠓矫鎸?duì)在非面向?qū)ο蠓矫鎸?duì)C的擴(kuò)充的擴(kuò)充2第第2章章 從從C到到C+C語(yǔ)言是C+的子集,C+包含了C語(yǔ)言的全部?jī)?nèi)容。一個(gè)C語(yǔ)言編寫(xiě)的程序不經(jīng)修改,就可以利用C+編譯器編譯,形成可執(zhí)行代碼。 C+對(duì)C語(yǔ)言注入了面向?qū)ο蟮男赂拍?,同時(shí)也增加了一些非面向?qū)ο蟮男绿匦?,這些新的特性使得C+程序更簡(jiǎn)潔或更安全。3第第2章章 從從C到到C+2.1 C+2.1 C+中的注釋語(yǔ)句中的注釋語(yǔ)句 在程序中,注釋語(yǔ)句的作用主要有兩個(gè):(1)讀程序的方便,程序員通常會(huì)增加一些說(shuō)明性的文字;(2)程序過(guò)程中,如果對(duì)于某(幾)條語(yǔ)句,暫時(shí)不能決定是否需要?jiǎng)h除時(shí)可以暫時(shí)
2、將其注釋。 4第第2章章 從從C到到C+C+中提供了兩種類(lèi)型的語(yǔ)句注釋方法:(1)塊注釋:即使用/*開(kāi)始,*/結(jié)束的形式,這種形式不允許出現(xiàn)注釋嵌套,主要用于多行注釋?zhuān)绯绦蜷_(kāi)頭的功能說(shuō)明,版權(quán)說(shuō)明等信息;(2)行注釋:即以“/”開(kāi)始,直到行結(jié)尾結(jié)束的注釋。這種方式多用于注釋單行,或在一行的后面添加說(shuō)明語(yǔ)句。這種注釋方式允許嵌套使用。5第第2章章 從從C到到C+下面用一個(gè)例子說(shuō)明C+中兩種注釋語(yǔ)句的用法:/*這是一個(gè)說(shuō)明C+中注釋語(yǔ)句的例子 當(dāng)前使用的塊注釋方式*/class MyComplex /這是用C+定義的一個(gè)復(fù)數(shù)類(lèi) /這是一條行注釋?zhuān)以谇短?private:double x;do
3、uble y; void display();上面的例子中前兩句采用了塊注釋?zhuān)坏谌性谛心┦褂眯凶⑨屨f(shuō)明本條語(yǔ)句的作用,并且使用了注釋嵌套;第四行用行注釋注釋掉一行。 6第第2章章 從從C到到C+2.2 C+中的輸入輸出 在C+中,除了可以利用C語(yǔ)言中的標(biāo)準(zhǔn)輸入輸出外,也可以通過(guò)輸入輸出流類(lèi)庫(kù)進(jìn)行。所謂“流”是指來(lái)自設(shè)備或輸出到設(shè)備的一系列字節(jié),這些字節(jié)按照進(jìn)入“流”的順序排列。iostream類(lèi)是最常用的流庫(kù),它提供了用于從標(biāo)準(zhǔn)輸入設(shè)備(默認(rèn)為鍵盤(pán))輸入的默認(rèn)對(duì)象cin和輸出到標(biāo)準(zhǔn)輸出設(shè)備(默認(rèn)為顯示器)的對(duì)象cout。利用cin和cout就可以完成數(shù)據(jù)的基本輸入和輸出。 7第第2章章 從從
4、C到到C+ 運(yùn)算符“”在C+中仍保持C中的右移功能,但用于輸入時(shí)擴(kuò)充了其功能,表示將從標(biāo)準(zhǔn)輸入流(即鍵盤(pán))讀取的數(shù)值傳送給右方指定的變量。例如: cinx;此時(shí),用戶(hù)從鍵盤(pán)輸入的數(shù)值會(huì)自動(dòng)轉(zhuǎn)換為變量用戶(hù)從鍵盤(pán)輸入的數(shù)值會(huì)自動(dòng)轉(zhuǎn)換為變量x x的的類(lèi)型,并存入變量類(lèi)型,并存入變量x x內(nèi)內(nèi)。 運(yùn)算符“”允許用戶(hù)連續(xù)輸入一連串?dāng)?shù)據(jù),例如: cinabc;它按照書(shū)寫(xiě)的順序從鍵盤(pán)上提取所要求的數(shù)據(jù),并存入對(duì)應(yīng)的變量中。兩個(gè)數(shù)據(jù)間用空白符(空格、兩個(gè)數(shù)據(jù)間用空白符(空格、回車(chē)或一個(gè)回車(chē)或一個(gè)TabTab鍵)分隔。鍵)分隔。8第第2章章 從從C到到C+ 運(yùn)算符“”在C+中仍然保持C中的“左移”操作,但用于輸
5、出時(shí)候擴(kuò)充了其功能,表示將右方的變量的值寫(xiě)到標(biāo)準(zhǔn)輸出流cout中,即顯示到屏幕上。例如執(zhí)行下面語(yǔ)句后: cout y;變量y的值將顯示到屏幕上。 運(yùn)算符運(yùn)算符“”允許用戶(hù)連續(xù)輸出一連串的數(shù)允許用戶(hù)連續(xù)輸出一連串的數(shù)據(jù),也可以輸出表達(dá)式的值,例如:據(jù),也可以輸出表達(dá)式的值,例如: coutcout a + bc; a + bc;它按照書(shū)寫(xiě)的順序輸出到屏幕上。9第第2章章 從從C到到C+說(shuō)明:說(shuō)明:(1) 如果在程序中使用cin和cout,必須將頭文件包含到本文件中:#include (2)使用“cin”可以連續(xù)輸入多個(gè)數(shù)據(jù),但是由于用戶(hù)常常忘記空白符號(hào)(空格、回車(chē)或一個(gè)Tab鍵)來(lái)分隔兩個(gè)數(shù)值,
6、容易造成輸入混亂,因此使用時(shí)要加以注意。10第第2章章 從從C到到C+ cout的一般形式為: cout表達(dá)式1變量1變量n; 例如: cinab; cout“a=”a“,b=”b; 當(dāng)輸入1 2時(shí),1被送給了a,2被送給了b。得到的輸出形式為: a=1,b=211第第2章章 從從C到到C+ (3) cin或cout語(yǔ)句可以寫(xiě)在同一行上,也可以分開(kāi)寫(xiě)在多行上。如果寫(xiě)在多行上,除最后一行外,行尾不能加分號(hào)。 cout“x = ”x “y = ”y; (4) 利用cin和cout,在輸入輸出時(shí)不必考慮變量或表達(dá)式的類(lèi)型。對(duì)于cout,系統(tǒng)會(huì)自動(dòng)判斷正確的類(lèi)型并進(jìn)行輸出;對(duì)于cin,系統(tǒng)也能夠會(huì)根據(jù)
7、變量的類(lèi)型從輸入流中提取相應(yīng)長(zhǎng)度的字節(jié)。12第第2章章 從從C到到C+ (5) 如果需要將數(shù)據(jù)換行輸出,可以插入一個(gè)換行符endl,如: cout”Hello”endl;/cout對(duì)象被插入一個(gè)endl cout”world!”; 輸出結(jié)果為: Hello World!13第第2章章 從從C到到C+2.3 變量和類(lèi)型.變量定義方法C+中幾乎可以在任何位置、任何時(shí)刻根據(jù)需要定義局部變量。 【例21】靈活變量定義的例子。 #include int sum=0; /在函數(shù)體外定義變量sumvoid main() int a5=0,1,2,3,4; for(int i=0;i5;i+) /在for語(yǔ)句
8、中定義變量i sum+=ai; double avg=sum/5; /在語(yǔ)句體中定義變量avgcoutsum=sum,average=avgendl;cout”i=”iendl;14第第2章章 從從C到到C+ 2. 枚舉,結(jié)構(gòu)體和共用體 C+中,枚舉名,結(jié)構(gòu)名和共用體名的定義與C語(yǔ)言中基本相同,但在使用時(shí)更方便。當(dāng)實(shí)例化變量時(shí),不必在一個(gè)枚舉名、結(jié)構(gòu)名或共用體名之前再加上類(lèi)型名。 15第第2章章 從從C到到C+可以采用如下的形式進(jìn)行定義變量:COLOR c;/定義一個(gè)COLOR型變量cTIME t;/定義一個(gè)TIME型變量tSALARY s;/定義一個(gè)SALARY型變量s不必象C語(yǔ)言那樣寫(xiě)成如
9、下形式:enum COLOR c;/定義一個(gè)COLOR型變量cstruct TIME t;/定義一個(gè)TIME型變量tunion SALARY s;/定義一個(gè)SALARY型變量s16第第2章章 從從C到到C+3. const修飾符 在編寫(xiě)程序時(shí)經(jīng)常需要定義常量,C+中保留了C語(yǔ)言中采用#define進(jìn)行定義的方式,如下列語(yǔ)句就定義了一個(gè)符號(hào)常量MAX_SIZE,用于代表100: #define MAX_SIZE 100 C+中引入一種更靈活、更安全的方式來(lái)定義常量,即使即使用用constconst關(guān)鍵字定義常量(也稱(chēng)為只讀變量),如:關(guān)鍵字定義常量(也稱(chēng)為只讀變量),如: const int m
10、axSize100;maxSize為一個(gè)int型的常變量,它的值為100,并且在整個(gè)運(yùn)行過(guò)程中不允許被改變。17第第2章章 從從C到到C+const除了可以用于定義普通的常變量之外,也可以用于定義常指針。它們的組合情況可以歸納為三種:指向常量的指針、常指針和指向常量的常指針。1)指向常量的指針:一個(gè)指向常量的指針變量。例如:const char *name=“chen”;2)常指針:指指針本身,而不是它所指向的對(duì)象為常量。例如:char * const p =hello; 3)指向常量的常指針:指針本身不能改變,它所指向的值也不能改變。例如: const char *const name=“c
11、hen”;18第第2章章 從從C到到C+【例22】const和指針結(jié)合的例子void main() char s=good; char *p1= hello; / 非const指針 const char *p2= s; / const數(shù)據(jù) *p2=G;/錯(cuò)誤 p2=p1; /正確 char* const p3= s; / const指針,非const數(shù)據(jù) *p3=G;/ 正確 p3=p1;/ 錯(cuò)誤 const char* const p4 = s; / const指針,const數(shù)據(jù) *p4=G;/ 錯(cuò)誤 p4=p1;/ 錯(cuò)誤19第第2章章 從從C到到C+說(shuō)明:(1) 如果用const定義的是
12、一個(gè)整型的常量,關(guān)鍵字int可以省略。下面兩行定義是等價(jià)的: const int LIMIT=100; const LIMIT=100;(2) 常量一旦被建立,在程序的任何地方不能再修改。(3) 與define定義的常量有所不同,const定義的常量可以有自己的數(shù)據(jù)類(lèi)型,這樣C+的編譯程序可以進(jìn)行更嚴(yán)格的類(lèi)型檢查,具有良好的編譯時(shí)的檢測(cè)性。20第第2章章 從從C到到C+【例23】說(shuō)明使用define的不安全性。#include main() int a=1; #define T1 a+a coutT1 is T1endl; #define T2 T1-T1 coutT2 is T2endl;
13、return 0;21第第2章章 從從C到到C+【例24】使用const取代define。#include main() int a=1; const T1= a+a; coutT1 is T1endl; const T2= T1-T1; coutT2 is T2endl; return 0;22第第2章章 從從C到到C+const的另外一個(gè)用途是:如果某個(gè)函數(shù)參數(shù)不允許被改變時(shí),如果某個(gè)函數(shù)參數(shù)不允許被改變時(shí),可用可用constconst將其聲明為常變量。將其聲明為常變量。例如:【例25】使用const修飾函數(shù)參數(shù)。 #include void fun(const int m) m=10;
14、/錯(cuò)誤,函數(shù)不能修改m,只能使用m coutm+100; /正確,使用m void main() int n=10; fun(n); coutn; /輸出 1023第第2章章 從從C到到C+4.強(qiáng)制類(lèi)型轉(zhuǎn)換 在C中如果要把一個(gè)整數(shù)(int)轉(zhuǎn)換為浮點(diǎn)數(shù)(float),要求使用如下的格式: int i=10; float x=(float)i;C+支持這樣的格式。還提供了一種更為方便的函數(shù)調(diào)用方法,即將類(lèi)型名作為函數(shù)名使用,使得類(lèi)型轉(zhuǎn)換的執(zhí)行看起來(lái)好像調(diào)用了一個(gè)函數(shù)。上面的語(yǔ)句可以改寫(xiě)成: int i=10; float x=float (i); 24第第2章章 從從C到到C+5.作用域運(yùn)算符“
15、:”通常情況下,如果有兩個(gè)同名變量,一個(gè)是全局的,另外一個(gè)是局部的,那么局部變量在其作用域內(nèi)具有更高的優(yōu)先權(quán)。下面的例子說(shuō)明了這一點(diǎn)?!纠?6】局部變量具有更高的優(yōu)先權(quán)。#include int avar=10;main()int avar;avar=25;coutavar is avarendl;return 0;程序的執(zhí)行結(jié)果如下:程序的執(zhí)行結(jié)果如下:avar is 2525第第2章章 從從C到到C+【例27】使用作用域運(yùn)算符“:”。#include int avar;main()int avar;avar=25;:avar=10;coutlocal avar = avarendl;cou
16、tglobal avar = :avarendl;return 0;程序的執(zhí)行結(jié)果如下:程序的執(zhí)行結(jié)果如下:local avar = 25Global avar=1026第第2章章 從從C到到C+2.4 C+2.4 C+中的函數(shù)中的函數(shù) C+保留了C語(yǔ)言中與函數(shù)有關(guān)的所有約定,例如函數(shù)定義格式,參數(shù)傳遞方式等。同時(shí),C+對(duì)于函數(shù)也進(jìn)行了一定的擴(kuò)充,例如允許為函數(shù)的形參設(shè)定默認(rèn)值,允許函數(shù)重載,引入了inline函數(shù)等。 27第第2章章 從從C到到C+1、函數(shù)的原型 C語(yǔ)言建議編程者為程序中的每一個(gè)函數(shù)建立原型,而C+要求必須為每一個(gè)函數(shù)建立原型,以說(shuō)明函數(shù)的名稱(chēng)、參數(shù)類(lèi)型與個(gè)數(shù),以及函數(shù)返回值
17、的類(lèi)型。 函數(shù)原型的語(yǔ)法形式一般為:函數(shù)原型是一條語(yǔ)句,它必須以分號(hào)結(jié)束。它由函數(shù)的返回類(lèi)型、函數(shù)名和參數(shù)表構(gòu)成。參數(shù)表包含所有的參數(shù)及它們的類(lèi)型,參數(shù)之間用逗號(hào)分開(kāi)。 返回類(lèi)型 函數(shù)名(參數(shù)表);28第第2章章 從從C到到C+【例28】函數(shù)原型的使用。#include void write(char *s);/函數(shù)的原型說(shuō)明main() write(hello, world); return 0;void write(char *s) coutsendl; 29第第2章章 從從C到到C+ 函數(shù)原型的參數(shù)表中可不包含參數(shù)的名字,只包含類(lèi)函數(shù)原型的參數(shù)表中可不包含參數(shù)的名字,只包含類(lèi)型。例如下面
18、的函數(shù)原型是完全合法的:型。例如下面的函數(shù)原型是完全合法的: int area(int, intint area(int, int);); 函數(shù)定義由函數(shù)說(shuō)明部分和函數(shù)體構(gòu)成。函數(shù)說(shuō)明部分函數(shù)定義由函數(shù)說(shuō)明部分和函數(shù)體構(gòu)成。函數(shù)說(shuō)明部分與函數(shù)原型基本一樣,但函數(shù)說(shuō)明部分中的參數(shù)必須給出名與函數(shù)原型基本一樣,但函數(shù)說(shuō)明部分中的參數(shù)必須給出名字,而且不包含結(jié)尾的分號(hào)字,而且不包含結(jié)尾的分號(hào);例如:;例如: int area(int length,intint area(int length,int width) width) return (length return (length* *widt
19、h);width); 主函數(shù)主函數(shù)main( )main( )不必進(jìn)行原型說(shuō)明,因?yàn)樗豢醋饕粋€(gè)不必進(jìn)行原型說(shuō)明,因?yàn)樗豢醋饕粋€(gè)自動(dòng)說(shuō)明原型的函數(shù)。主函數(shù)是第一個(gè)被執(zhí)行的函數(shù),不存自動(dòng)說(shuō)明原型的函數(shù)。主函數(shù)是第一個(gè)被執(zhí)行的函數(shù),不存在被別的函數(shù)調(diào)用的問(wèn)題。在被別的函數(shù)調(diào)用的問(wèn)題。30第第2章章 從從C到到C+ 函數(shù)原型說(shuō)明中沒(méi)有指出返回類(lèi)型的函數(shù)(包括main( ) ),C+默認(rèn)該函數(shù)的返回類(lèi)型是int。 如果一個(gè)函數(shù)沒(méi)有返回值,則必須在函數(shù)原型前注明返回值類(lèi)型為void。 如果函數(shù)原型中未注明參數(shù),C+假定該函數(shù)的參數(shù)表為空(void),即不帶任何參數(shù)。31第第2章章 從從C到到C+2.
20、帶有默認(rèn)參數(shù)值的函數(shù) 函數(shù)調(diào)用時(shí),主調(diào)函數(shù)和被調(diào)函數(shù)存在著數(shù)據(jù)傳遞關(guān)系,即主調(diào)函數(shù)需要將實(shí)參的值傳遞給形參。 如果某個(gè)函數(shù)在多次被調(diào)用的情況下都需要使用某個(gè)參數(shù)值,此時(shí)就可以為該函數(shù)設(shè)置默認(rèn)值。例如函數(shù)max的函數(shù)說(shuō)明為: int max(int a=2,int b=3)這里為max的形參a和b分別指定了默認(rèn)值2和3。 當(dāng)進(jìn)行函數(shù)調(diào)用的時(shí)候,編譯器按照從左向右的順序?qū)?shí)參與形參結(jié)合,若未指定足夠的實(shí)參,則編譯器按順序用函數(shù)原型中的缺省值來(lái)補(bǔ)足所缺少的實(shí)參。32第第2章章 從從C到到C+例如,在主調(diào)函數(shù)中可以使用如下形式調(diào)用max函數(shù): z=max();/省略?xún)蓚€(gè)實(shí)參值, /相當(dāng)于語(yǔ)句 z=ma
21、x(2,3); z=max(5);/省略第2個(gè)實(shí)參值, /相當(dāng)于語(yǔ)句z=max(5,3); z=max(-1,4);/忽略函數(shù)默認(rèn)參數(shù)值33第第2章章 從從C到到C+使用函數(shù)參數(shù)默認(rèn)值時(shí)需要注意如下幾點(diǎn):使用函數(shù)參數(shù)默認(rèn)值時(shí)需要注意如下幾點(diǎn): (1) 當(dāng)為函數(shù)指定默認(rèn)參數(shù)值時(shí),必須按照由右到左的順序進(jìn)行指定,決不允許存在一個(gè)參數(shù)指定默認(rèn)值,而它右邊的參數(shù)沒(méi)有默認(rèn)值的情況。 例如函數(shù)聲明: int f1(int a,int b=2,int c=3); /正確 int f2(int a=1,int b=2,int c); /錯(cuò)誤,c沒(méi)有默認(rèn)值,/所以不能為a和b指定默認(rèn)值 int f3(int a
22、=1,int b,int c=3); /錯(cuò)誤,b沒(méi)有默認(rèn)值, /所以不能為a指定默認(rèn)值34第第2章章 從從C到到C+(2) 如果設(shè)置了默認(rèn)參數(shù)的函數(shù)定義在主調(diào)函數(shù)之前,可以省略函數(shù)聲明語(yǔ)句;否則在調(diào)用前必須有函數(shù)聲明語(yǔ)句,且聲明語(yǔ)句中必須指明參數(shù)默認(rèn)值。35第第2章章 從從C到到C+以下是幾個(gè)采用函數(shù)默認(rèn)值的例子以下是幾個(gè)采用函數(shù)默認(rèn)值的例子 :(1)void print(int a=2);void main() print();void print(int a) coutaendl;(2)void print(int a);void main() print();void print(int
23、 a=2) coutaendl;(3)void print(int a=2 );void main() print();void print(int a=2) coutab?a:b;void main()int x=2,y=3,z;z=max(x,y);coutzy?x:y;39第第2章章 從從C到到C+說(shuō)明:(1)內(nèi)聯(lián)函數(shù)在被調(diào)用之前必須進(jìn)行完整的定義,否則編譯器將無(wú)法知道應(yīng)該插入什么代碼。內(nèi)聯(lián)函數(shù)通常寫(xiě)在主函數(shù)前。(2)C+的內(nèi)聯(lián)函數(shù)具有與C中的宏定義#define相同的作用和相似的原理,但消除了#define的不安全因素。請(qǐng)看下面兩個(gè)例子:40第第2章章 從從C到到C+【例29】使用帶參
24、數(shù)宏定義完成乘2的功能。#include #define doub(x) x*2int main() for(int i=1;i=3;i+) couti doubled is doub(i)endl; cout1+2 doubled is doub(1+2)endl; return 0;程序的執(zhí)行結(jié)果如下:程序的執(zhí)行結(jié)果如下:1 doubled is 22 doubled is 43 doubled is 61+2 doubled is 541第第2章章 從從C到到C+【例210】使用內(nèi)聯(lián)函數(shù)完成乘2的功能。#include inline int doub(int x) return x*2;
25、 int main()for(int i=1;i=3;i+)couti doubled is doub(i)endl;cout1+2 doubled is doub(1+2)endl;return 0;程序的執(zhí)行結(jié)果如下:程序的執(zhí)行結(jié)果如下:1 doubled is 22 doubled is 43 doubled is 61+2 doubled is 642第第2章章 從從C到到C+注意: 并非在函數(shù)定義時(shí)加上inline,編譯系統(tǒng)就一定會(huì)將其看作inline函數(shù)。關(guān)鍵字inline只是給編譯系統(tǒng)提供一個(gè)建議,希望編譯系統(tǒng)在編譯時(shí)能將函數(shù)代碼替換到函數(shù)調(diào)用位置,但是如果函數(shù)中存在循環(huán)語(yǔ)句,s
26、witch語(yǔ)句,或存在數(shù)組定義時(shí),編譯系統(tǒng)將不知道應(yīng)該如何替換,只能將其按照普通函數(shù)處理。 因此,只有那些不包含循環(huán)和switch選擇結(jié)構(gòu),不包含數(shù)組定義,并且代碼行數(shù)較少(建議不超過(guò)5行)的函數(shù)才適合設(shè)計(jì)成inline函數(shù)。 43第第2章章 從從C到到C+4.函數(shù)重載 在C+中,一個(gè)函數(shù)名可以對(duì)應(yīng)多個(gè)不同的函數(shù)。當(dāng)兩個(gè)或兩個(gè)以上的函數(shù)共用一個(gè)函數(shù)名時(shí),稱(chēng)為函數(shù)重載 。被重載的函數(shù)稱(chēng)為重載 函數(shù)。 函數(shù)重載有兩種基本的方式:一種是函數(shù)參數(shù)個(gè)數(shù)相同,但類(lèi)型有所不同的重載,另外一種是函數(shù)參數(shù)個(gè)數(shù)也不同的重載。 44第第2章章 從從C到到C+【例211】參數(shù)類(lèi)型不同的函數(shù)重載的例子#include
27、int max(int a,int b) return ab?a:b;double max(double a,double b)return ab?a:b;void main()coutmax(10,5)endl;/調(diào)用第1個(gè)max函數(shù)coutmax(10.5,5.0)endl;/調(diào)用第2個(gè)max函數(shù) 45第第2章章 從從C到到C+【例2-12】形參個(gè)數(shù)不同的函數(shù)重載的例子。#include int max(int a,int b)return ab?a:b;int max(int a,int b,int c)int d=max(a,b);return dc?d:c;void main()co
28、utmax(10,5)endl;/調(diào)用第1個(gè)max函數(shù)coutmax(10,5,2)endl;/調(diào)用第2個(gè)max函數(shù)46第第2章章 從從C到到C+注意:(1) 面向?qū)ο笾胁恢С趾瘮?shù)參數(shù)個(gè)數(shù)和參數(shù)類(lèi)型都相同,但函數(shù)返回類(lèi)型不相同的重載方式。(重載函數(shù)應(yīng)該在參數(shù)個(gè)數(shù)或參數(shù)類(lèi)型上有所不同,否則編譯器沒(méi)有辦法確定調(diào)用哪一個(gè)重載版本。)(2) 通常重載的函數(shù)應(yīng)該具有相同或相似的功能,不應(yīng)出現(xiàn)兩個(gè)同名函數(shù)提供完全不同或差異太大的功能,這樣在編程過(guò)程中很容易產(chǎn)生混淆,不利于程序的編寫(xiě)和閱讀。只有在某個(gè)函數(shù)需要處理不同類(lèi)型的參數(shù)或者不同個(gè)數(shù)的參數(shù)時(shí),才需要進(jìn)行重載,其他時(shí)候沒(méi)有重載的必要。 47第第2章章 從
29、從C到到C+2.5動(dòng)態(tài)內(nèi)存分配 對(duì)于一個(gè)程序單元而言,可以有兩種獲得內(nèi)存的方式:靜態(tài)內(nèi)存分配和動(dòng)態(tài)內(nèi)存分配。前者是在編譯階段就分配好存儲(chǔ)空間,并且這些空間的大小在程序運(yùn)行期間是不可更改的,例如全局變量,數(shù)組等的分配;后者則是由程序員在程序中通過(guò)使用內(nèi)存分配函數(shù)或使用內(nèi)存分配運(yùn)算符從系統(tǒng)堆(一塊自由存儲(chǔ)區(qū))中獲取存儲(chǔ)空間。靜態(tài)獲得的內(nèi)存,系統(tǒng)在變量等生命期結(jié)束時(shí)自動(dòng)回收,動(dòng)態(tài)獲得的空間需要程序員通過(guò)語(yǔ)句或運(yùn)算顯式地釋放。48第第2章章 從從C到到C+1.new運(yùn)算符 C語(yǔ)言中使用函數(shù)malloc( )和free( )動(dòng)態(tài)分配內(nèi)存和釋放動(dòng)態(tài)分配的內(nèi)存。C+中使用運(yùn)算符new和delete能更好地、
30、更簡(jiǎn)單地進(jìn)行內(nèi)存的分配和釋放。 new運(yùn)算符用于動(dòng)態(tài)分配一塊連續(xù)的內(nèi)存空間,其基本語(yǔ)法形式有: new /*從一塊自由存儲(chǔ)區(qū)中分配一塊sizeof(type)字節(jié)大小的內(nèi)存。*/其中,其中,type可以是可以是C+支持的所有數(shù)據(jù)類(lèi)型名,可支持的所有數(shù)據(jù)類(lèi)型名,可以是基本的數(shù)據(jù)類(lèi)型,也可以是自定義數(shù)據(jù)類(lèi)型。以是基本的數(shù)據(jù)類(lèi)型,也可以是自定義數(shù)據(jù)類(lèi)型。49第第2章章 從從C到到C+ new運(yùn)算符返回一個(gè)指向所分配的存儲(chǔ)空間的第1個(gè)單元的指針,如果當(dāng)前存儲(chǔ)器沒(méi)有足夠的內(nèi)存空間可分配,則返回NULL。例如:int * p1=new int; /分配一個(gè)用于存儲(chǔ)1個(gè)整型數(shù)據(jù)的連續(xù)區(qū)域,/并將首地址返回給
31、p1使用new可以為數(shù)組動(dòng)態(tài)分配空間,這時(shí)候需要在類(lèi)型名后加上數(shù)組的大小。 int * p1=new int1;int* p2=new int10; /分配一個(gè)整型的一維數(shù)組/ (大小為10個(gè)整型數(shù)據(jù)),并將首地址返回給p2int * p3=new int45;/分配一個(gè)整型數(shù)組能存儲(chǔ) /一個(gè)45的二維數(shù)組,并將首地址返回給p3使用使用newnew動(dòng)態(tài)分配內(nèi)存動(dòng)態(tài)分配內(nèi)存的時(shí)候,如果沒(méi)有足夠的時(shí)候,如果沒(méi)有足夠的內(nèi)存滿(mǎn)足分配要求,的內(nèi)存滿(mǎn)足分配要求,newnew將返回空指針將返回空指針(NULL).(NULL).因此,通常要對(duì)內(nèi)存的因此,通常要對(duì)內(nèi)存的動(dòng)態(tài)分配是否成功進(jìn)行檢查動(dòng)態(tài)分配是否成功進(jìn)
32、行檢查50第第2章章 從從C到到C+2.delete運(yùn)算符 對(duì)于動(dòng)態(tài)分配的內(nèi)存在使用完后,一定要及時(shí)歸還給系統(tǒng)。如果應(yīng)用程序?qū)τ邢薜膬?nèi)存只取不還,系統(tǒng)很快就會(huì)因?yàn)閮?nèi)存枯竭而崩潰。利用new動(dòng)態(tài)分配的存儲(chǔ)空間通??梢岳胐elete運(yùn)算進(jìn)行釋放。delete運(yùn)算符的基本語(yǔ)法形式有: delete 指針變量 /指針變量中保存的是 / new分配的內(nèi)存首地址delete 指針變量 /釋放動(dòng)態(tài)分配的數(shù)組存儲(chǔ)區(qū)51第第2章章 從從C到到C+使用delete釋放內(nèi)存空間時(shí),應(yīng)注意以下幾點(diǎn): (1)利用new運(yùn)算符分配的內(nèi)存空間,只許使用一次delete,如果對(duì)同一塊空間進(jìn)行多次釋放,將會(huì)導(dǎo)致嚴(yán)重錯(cuò)誤。(2
33、)delete只能用來(lái)釋放動(dòng)態(tài)分配的內(nèi)存空間。52第第2章章 從從C到到C+【例2-13】使用new和delete的例子。#include main()int *p;p=new int;if(!p) /若動(dòng)態(tài)分配內(nèi)存失敗時(shí), coutallocation failuren; return 1;*p=20;cout*p;delete p;return 0;53第第2章章 從從C到到C+2.6 引用1. 引用的定義與特點(diǎn) 所謂引用,就是給變量取個(gè)別名,定義引用的基本格式為:(1)類(lèi)型 &引用名變量名;(2)類(lèi)型 &引用名(變量名);引用必須初始化。例如:int n;/定義整型變量n
34、int &refn=n;/為n定義一個(gè)別名refn引用與被引用的變量具有相同的地址,因而對(duì)引用的存取就是對(duì)變量的存取。當(dāng)實(shí)體或引用其中一個(gè)發(fā)生變化,另一個(gè)也隨之改變。 54第第2章章 從從C到到C+【例214】引用的例子。#include void main() int n=2; int &refn=n;/為n定義一個(gè)別名refn cout&n=&n,&refn=&refnendl;/輸出n和refn的地址 coutn=n,refn=refnendl; n+=5; /修改變量的值 coutn=n,refn=refnendl; refn*=2; /
35、修改引用的值 coutn=n,refn=refnendl; 輸出結(jié)果為:輸出結(jié)果為:&n=0013FF60,&refn=0013FF60n=2,refn=2n=7,refn=7n=14,refn=1455第第2章章 從從C到到C+2、 引用作函數(shù)的參數(shù) C語(yǔ)言中,實(shí)參和形參之間的數(shù)據(jù)傳遞采用的是單向的值傳遞方式:要求實(shí)參和形參的類(lèi)型和個(gè)數(shù)要一致。實(shí)參將 “單向性”的“值傳遞”給形參。在被調(diào)函數(shù)中對(duì)形參的值的修改不會(huì)影響到實(shí)參。當(dāng)函數(shù)未被調(diào)用時(shí),形參不占內(nèi)存。當(dāng)函數(shù)被調(diào)用時(shí),為形參分配內(nèi)存,并將實(shí)參的值傳遞給形參;函數(shù)調(diào)用結(jié)束時(shí),釋放形參所占存儲(chǔ)空間?!纠?14】值傳遞的例子。5
36、6第第2章章 從從C到到C+主調(diào)函數(shù)主調(diào)函數(shù)被調(diào)函數(shù)被調(diào)函數(shù)includevoid swap(int,int);void main ()int a,b;a=5;b=9;swap(a,b);cout“a=“a“b=“b;swap (int x,int y) int t; t=x; x=y; y=t;55ab實(shí)實(shí) 參參形形 參參99xyabxy9557第第2章章 從從C到到C+通常,可以利用指針可以解決這一問(wèn)題?!纠?15】#include void swap(int *a,int *b) int t=*a; a=a=b; *b=t;void main() int a=2,b=3; couta=a
37、,b=bendl; swap(a,b); couta=a,b=bendl;輸出結(jié)果:輸出結(jié)果:a=2,b=3a=3,b=258第第2章章 從從C到到C+主調(diào)函數(shù)主調(diào)函數(shù)被調(diào)函數(shù)被調(diào)函數(shù)&a實(shí)實(shí) 參參形形 參參&b*x*yabvoid swap(int *x,int *y) int t; t=*x;*x=*y;*y=t; #includevoid swap(int*,int *);void main()int a,b;a=5;b=9;swap( &a, &b );cout“a=”a“b=“b;5ab9xy&b&a9559第第2章章 從從C到到C+【例2-16】例2-14的改寫(xiě)。#include void swap(int
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工禮儀行為規(guī)范培訓(xùn)
- 醫(yī)療器械設(shè)計(jì)和開(kāi)發(fā)培訓(xùn)
- 強(qiáng)國(guó)有我主題教育讀書(shū)活動(dòng)
- 商標(biāo)代理推廣傭金合同(2篇)
- 商品推廣責(zé)任協(xié)議
- 廚房消防安全培訓(xùn)
- 感染科講課課件
- 建材采購(gòu)清單協(xié)議
- 辛集中學(xué)高三下學(xué)期模擬鞏固訓(xùn)練(6)歷史試題
- 阿克蘇工業(yè)職業(yè)技術(shù)學(xué)院《藥用高分子材料學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024中國(guó)山東省集中供熱行業(yè)發(fā)展趨勢(shì)預(yù)測(cè)及投資戰(zhàn)略咨詢(xún)報(bào)告
- 企業(yè)主要負(fù)責(zé)人安全培訓(xùn)試題及答案 完整
- 全民國(guó)家安全教育日主題班會(huì)-童你一起共護(hù)國(guó)安課件
- 肯德基店面試試題及答案
- 2024年 全國(guó)職業(yè)院校技能大賽(中職組)嬰幼兒保育項(xiàng)目 規(guī)程
- 【北師大版】2024-2025學(xué)年七年級(jí)數(shù)學(xué)下冊(cè)教學(xué)工作計(jì)劃(含進(jìn)度表)
- 深信服下一代防火墻技術(shù)白皮書(shū)20231120
- 《國(guó)際貨運(yùn)代理英語(yǔ)》課件-Customs Clearance 清關(guān)基本知識(shí)介紹
- 七年級(jí)數(shù)學(xué)新北師大版(2024)下冊(cè)第一章《整式的乘除》單元檢測(cè)習(xí)題(含簡(jiǎn)單答案)
- 2024員工質(zhì)量意識(shí)培訓(xùn)
- 《冠心病》課件(完整版)
評(píng)論
0/150
提交評(píng)論