![第二次課C++在非面向?qū)ο蠓矫鎸的擴(kuò)充_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/28/3b726126-3dbd-4919-90a2-92ec4be9d435/3b726126-3dbd-4919-90a2-92ec4be9d4351.gif)
![第二次課C++在非面向?qū)ο蠓矫鎸的擴(kuò)充_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/28/3b726126-3dbd-4919-90a2-92ec4be9d435/3b726126-3dbd-4919-90a2-92ec4be9d4352.gif)
![第二次課C++在非面向?qū)ο蠓矫鎸的擴(kuò)充_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/28/3b726126-3dbd-4919-90a2-92ec4be9d435/3b726126-3dbd-4919-90a2-92ec4be9d4353.gif)
![第二次課C++在非面向?qū)ο蠓矫鎸的擴(kuò)充_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/28/3b726126-3dbd-4919-90a2-92ec4be9d435/3b726126-3dbd-4919-90a2-92ec4be9d4354.gif)
![第二次課C++在非面向?qū)ο蠓矫鎸的擴(kuò)充_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/28/3b726126-3dbd-4919-90a2-92ec4be9d435/3b726126-3dbd-4919-90a2-92ec4be9d4355.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1第第2章章 從從C到到C+第第2章章 C+在非面向?qū)ο蠓矫鎸υ诜敲嫦驅(qū)ο蠓矫鎸的擴(kuò)充的擴(kuò)充2第第2章章 從從C到到C+C語言是C+的子集,C+包含了C語言的全部內(nèi)容。一個C語言編寫的程序不經(jīng)修改,就可以利用C+編譯器編譯,形成可執(zhí)行代碼。 C+對C語言注入了面向?qū)ο蟮男赂拍?,同時也增加了一些非面向?qū)ο蟮男绿匦裕@些新的特性使得C+程序更簡潔或更安全。3第第2章章 從從C到到C+2.1 C+2.1 C+中的注釋語句中的注釋語句 在程序中,注釋語句的作用主要有兩個:(1)讀程序的方便,程序員通常會增加一些說明性的文字;(2)程序過程中,如果對于某(幾)條語句,暫時不能決定是否需要刪除時可以暫時
2、將其注釋。 4第第2章章 從從C到到C+C+中提供了兩種類型的語句注釋方法:(1)塊注釋:即使用/*開始,*/結(jié)束的形式,這種形式不允許出現(xiàn)注釋嵌套,主要用于多行注釋,例如程序開頭的功能說明,版權(quán)說明等信息;(2)行注釋:即以“/”開始,直到行結(jié)尾結(jié)束的注釋。這種方式多用于注釋單行,或在一行的后面添加說明語句。這種注釋方式允許嵌套使用。5第第2章章 從從C到到C+下面用一個例子說明C+中兩種注釋語句的用法:/*這是一個說明C+中注釋語句的例子 當(dāng)前使用的塊注釋方式*/class MyComplex /這是用C+定義的一個復(fù)數(shù)類 /這是一條行注釋,我在嵌套/private:double x;do
3、uble y; void display();上面的例子中前兩句采用了塊注釋;第三行在行末使用行注釋說明本條語句的作用,并且使用了注釋嵌套;第四行用行注釋注釋掉一行。 6第第2章章 從從C到到C+2.2 C+中的輸入輸出 在C+中,除了可以利用C語言中的標(biāo)準(zhǔn)輸入輸出外,也可以通過輸入輸出流類庫進(jìn)行。所謂“流”是指來自設(shè)備或輸出到設(shè)備的一系列字節(jié),這些字節(jié)按照進(jìn)入“流”的順序排列。iostream類是最常用的流庫,它提供了用于從標(biāo)準(zhǔn)輸入設(shè)備(默認(rèn)為鍵盤)輸入的默認(rèn)對象cin和輸出到標(biāo)準(zhǔn)輸出設(shè)備(默認(rèn)為顯示器)的對象cout。利用cin和cout就可以完成數(shù)據(jù)的基本輸入和輸出。 7第第2章章 從從
4、C到到C+ 運(yùn)算符“”在C+中仍保持C中的右移功能,但用于輸入時擴(kuò)充了其功能,表示將從標(biāo)準(zhǔn)輸入流(即鍵盤)讀取的數(shù)值傳送給右方指定的變量。例如: cinx;此時,用戶從鍵盤輸入的數(shù)值會自動轉(zhuǎn)換為變量用戶從鍵盤輸入的數(shù)值會自動轉(zhuǎn)換為變量x x的的類型,并存入變量類型,并存入變量x x內(nèi)內(nèi)。 運(yùn)算符“”允許用戶連續(xù)輸入一連串?dāng)?shù)據(jù),例如: cinabc;它按照書寫的順序從鍵盤上提取所要求的數(shù)據(jù),并存入對應(yīng)的變量中。兩個數(shù)據(jù)間用空白符(空格、兩個數(shù)據(jù)間用空白符(空格、回車或一個回車或一個TabTab鍵)分隔。鍵)分隔。8第第2章章 從從C到到C+ 運(yùn)算符“”在C+中仍然保持C中的“左移”操作,但用于輸
5、出時候擴(kuò)充了其功能,表示將右方的變量的值寫到標(biāo)準(zhǔn)輸出流cout中,即顯示到屏幕上。例如執(zhí)行下面語句后: cout y;變量y的值將顯示到屏幕上。 運(yùn)算符運(yùn)算符“”允許用戶連續(xù)輸出一連串的數(shù)允許用戶連續(xù)輸出一連串的數(shù)據(jù),也可以輸出表達(dá)式的值,例如:據(jù),也可以輸出表達(dá)式的值,例如: coutcout a + bc; a + bc;它按照書寫的順序輸出到屏幕上。9第第2章章 從從C到到C+說明:說明:(1) 如果在程序中使用cin和cout,必須將頭文件包含到本文件中:#include (2)使用“cin”可以連續(xù)輸入多個數(shù)據(jù),但是由于用戶常常忘記空白符號(空格、回車或一個Tab鍵)來分隔兩個數(shù)值,
6、容易造成輸入混亂,因此使用時要加以注意。10第第2章章 從從C到到C+ cout的一般形式為: cout表達(dá)式1變量1變量n; 例如: cinab; cout“a=”a“,b=”b; 當(dāng)輸入1 2時,1被送給了a,2被送給了b。得到的輸出形式為: a=1,b=211第第2章章 從從C到到C+ (3) cin或cout語句可以寫在同一行上,也可以分開寫在多行上。如果寫在多行上,除最后一行外,行尾不能加分號。 cout“x = ”x “y = ”y; (4) 利用cin和cout,在輸入輸出時不必考慮變量或表達(dá)式的類型。對于cout,系統(tǒng)會自動判斷正確的類型并進(jìn)行輸出;對于cin,系統(tǒng)也能夠會根據(jù)
7、變量的類型從輸入流中提取相應(yīng)長度的字節(jié)。12第第2章章 從從C到到C+ (5) 如果需要將數(shù)據(jù)換行輸出,可以插入一個換行符endl,如: cout”Hello”endl;/cout對象被插入一個endl cout”world!”; 輸出結(jié)果為: Hello World!13第第2章章 從從C到到C+2.3 變量和類型.變量定義方法C+中幾乎可以在任何位置、任何時刻根據(jù)需要定義局部變量。 【例21】靈活變量定義的例子。 #include int sum=0; /在函數(shù)體外定義變量sumvoid main() int a5=0,1,2,3,4; for(int i=0;i5;i+) /在for語句
8、中定義變量i sum+=ai; double avg=sum/5; /在語句體中定義變量avgcoutsum=sum,average=avgendl;cout”i=”iendl;14第第2章章 從從C到到C+ 2. 枚舉,結(jié)構(gòu)體和共用體 C+中,枚舉名,結(jié)構(gòu)名和共用體名的定義與C語言中基本相同,但在使用時更方便。當(dāng)實(shí)例化變量時,不必在一個枚舉名、結(jié)構(gòu)名或共用體名之前再加上類型名。 15第第2章章 從從C到到C+可以采用如下的形式進(jìn)行定義變量:COLOR c;/定義一個COLOR型變量cTIME t;/定義一個TIME型變量tSALARY s;/定義一個SALARY型變量s不必象C語言那樣寫成如
9、下形式:enum COLOR c;/定義一個COLOR型變量cstruct TIME t;/定義一個TIME型變量tunion SALARY s;/定義一個SALARY型變量s16第第2章章 從從C到到C+3. const修飾符 在編寫程序時經(jīng)常需要定義常量,C+中保留了C語言中采用#define進(jìn)行定義的方式,如下列語句就定義了一個符號常量MAX_SIZE,用于代表100: #define MAX_SIZE 100 C+中引入一種更靈活、更安全的方式來定義常量,即使即使用用constconst關(guān)鍵字定義常量(也稱為只讀變量),如:關(guān)鍵字定義常量(也稱為只讀變量),如: const int m
10、axSize100;maxSize為一個int型的常變量,它的值為100,并且在整個運(yùn)行過程中不允許被改變。17第第2章章 從從C到到C+const除了可以用于定義普通的常變量之外,也可以用于定義常指針。它們的組合情況可以歸納為三種:指向常量的指針、常指針和指向常量的常指針。1)指向常量的指針:一個指向常量的指針變量。例如:const char *name=“chen”;2)常指針:指指針本身,而不是它所指向的對象為常量。例如: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;/錯誤 p2=p1; /正確 char* const p3= s; / const指針,非const數(shù)據(jù) *p3=G;/ 正確 p3=p1;/ 錯誤 const char* const p4 = s; / const指針,const數(shù)據(jù) *p4=G;/ 錯誤 p4=p1;/ 錯誤19第第2章章 從從C到到C+說明:(1) 如果用const定義的是
12、一個整型的常量,關(guān)鍵字int可以省略。下面兩行定義是等價的: const int LIMIT=100; const LIMIT=100;(2) 常量一旦被建立,在程序的任何地方不能再修改。(3) 與define定義的常量有所不同,const定義的常量可以有自己的數(shù)據(jù)類型,這樣C+的編譯程序可以進(jìn)行更嚴(yán)格的類型檢查,具有良好的編譯時的檢測性。20第第2章章 從從C到到C+【例23】說明使用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的另外一個用途是:如果某個函數(shù)參數(shù)不允許被改變時,如果某個函數(shù)參數(shù)不允許被改變時,可用可用constconst將其聲明為常變量。將其聲明為常變量。例如:【例25】使用const修飾函數(shù)參數(shù)。 #include void fun(const int m) m=10;
14、/錯誤,函數(shù)不能修改m,只能使用m coutm+100; /正確,使用m void main() int n=10; fun(n); coutn; /輸出 1023第第2章章 從從C到到C+4.強(qiáng)制類型轉(zhuǎn)換 在C中如果要把一個整數(shù)(int)轉(zhuǎn)換為浮點(diǎn)數(shù)(float),要求使用如下的格式: int i=10; float x=(float)i;C+支持這樣的格式。還提供了一種更為方便的函數(shù)調(diào)用方法,即將類型名作為函數(shù)名使用,使得類型轉(zhuǎn)換的執(zhí)行看起來好像調(diào)用了一個函數(shù)。上面的語句可以改寫成: int i=10; float x=float (i); 24第第2章章 從從C到到C+5.作用域運(yùn)算符“
15、:”通常情況下,如果有兩個同名變量,一個是全局的,另外一個是局部的,那么局部變量在其作用域內(nèi)具有更高的優(yōu)先權(quán)。下面的例子說明了這一點(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語言中與函數(shù)有關(guān)的所有約定,例如函數(shù)定義格式,參數(shù)傳遞方式等。同時,C+對于函數(shù)也進(jìn)行了一定的擴(kuò)充,例如允許為函數(shù)的形參設(shè)定默認(rèn)值,允許函數(shù)重載,引入了inline函數(shù)等。 27第第2章章 從從C到到C+1、函數(shù)的原型 C語言建議編程者為程序中的每一個函數(shù)建立原型,而C+要求必須為每一個函數(shù)建立原型,以說明函數(shù)的名稱、參數(shù)類型與個數(shù),以及函數(shù)返回值
17、的類型。 函數(shù)原型的語法形式一般為:函數(shù)原型是一條語句,它必須以分號結(jié)束。它由函數(shù)的返回類型、函數(shù)名和參數(shù)表構(gòu)成。參數(shù)表包含所有的參數(shù)及它們的類型,參數(shù)之間用逗號分開。 返回類型 函數(shù)名(參數(shù)表);28第第2章章 從從C到到C+【例28】函數(shù)原型的使用。#include void write(char *s);/函數(shù)的原型說明main() write(hello, world); return 0;void write(char *s) coutsendl; 29第第2章章 從從C到到C+ 函數(shù)原型的參數(shù)表中可不包含參數(shù)的名字,只包含類函數(shù)原型的參數(shù)表中可不包含參數(shù)的名字,只包含類型。例如下面
18、的函數(shù)原型是完全合法的:型。例如下面的函數(shù)原型是完全合法的: int area(int, intint area(int, int);); 函數(shù)定義由函數(shù)說明部分和函數(shù)體構(gòu)成。函數(shù)說明部分函數(shù)定義由函數(shù)說明部分和函數(shù)體構(gòu)成。函數(shù)說明部分與函數(shù)原型基本一樣,但函數(shù)說明部分中的參數(shù)必須給出名與函數(shù)原型基本一樣,但函數(shù)說明部分中的參數(shù)必須給出名字,而且不包含結(jié)尾的分號字,而且不包含結(jié)尾的分號;例如:;例如: 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)行原型說明,因?yàn)樗豢醋饕粋€不必進(jìn)行原型說明,因?yàn)樗豢醋饕粋€自動說明原型的函數(shù)。主函數(shù)是第一個被執(zhí)行的函數(shù),不存自動說明原型的函數(shù)。主函數(shù)是第一個被執(zhí)行的函數(shù),不存在被別的函數(shù)調(diào)用的問題。在被別的函數(shù)調(diào)用的問題。30第第2章章 從從C到到C+ 函數(shù)原型說明中沒有指出返回類型的函數(shù)(包括main( ) ),C+默認(rèn)該函數(shù)的返回類型是int。 如果一個函數(shù)沒有返回值,則必須在函數(shù)原型前注明返回值類型為void。 如果函數(shù)原型中未注明參數(shù),C+假定該函數(shù)的參數(shù)表為空(void),即不帶任何參數(shù)。31第第2章章 從從C到到C+2.
20、帶有默認(rèn)參數(shù)值的函數(shù) 函數(shù)調(diào)用時,主調(diào)函數(shù)和被調(diào)函數(shù)存在著數(shù)據(jù)傳遞關(guān)系,即主調(diào)函數(shù)需要將實(shí)參的值傳遞給形參。 如果某個函數(shù)在多次被調(diào)用的情況下都需要使用某個參數(shù)值,此時就可以為該函數(shù)設(shè)置默認(rèn)值。例如函數(shù)max的函數(shù)說明為: int max(int a=2,int b=3)這里為max的形參a和b分別指定了默認(rèn)值2和3。 當(dāng)進(jìn)行函數(shù)調(diào)用的時候,編譯器按照從左向右的順序?qū)?shí)參與形參結(jié)合,若未指定足夠的實(shí)參,則編譯器按順序用函數(shù)原型中的缺省值來補(bǔ)足所缺少的實(shí)參。32第第2章章 從從C到到C+例如,在主調(diào)函數(shù)中可以使用如下形式調(diào)用max函數(shù): z=max();/省略兩個實(shí)參值, /相當(dāng)于語句 z=ma
21、x(2,3); z=max(5);/省略第2個實(shí)參值, /相當(dāng)于語句z=max(5,3); z=max(-1,4);/忽略函數(shù)默認(rèn)參數(shù)值33第第2章章 從從C到到C+使用函數(shù)參數(shù)默認(rèn)值時需要注意如下幾點(diǎn):使用函數(shù)參數(shù)默認(rèn)值時需要注意如下幾點(diǎn): (1) 當(dāng)為函數(shù)指定默認(rèn)參數(shù)值時,必須按照由右到左的順序進(jìn)行指定,決不允許存在一個參數(shù)指定默認(rèn)值,而它右邊的參數(shù)沒有默認(rèn)值的情況。 例如函數(shù)聲明: int f1(int a,int b=2,int c=3); /正確 int f2(int a=1,int b=2,int c); /錯誤,c沒有默認(rèn)值,/所以不能為a和b指定默認(rèn)值 int f3(int a
22、=1,int b,int c=3); /錯誤,b沒有默認(rèn)值, /所以不能為a指定默認(rèn)值34第第2章章 從從C到到C+(2) 如果設(shè)置了默認(rèn)參數(shù)的函數(shù)定義在主調(diào)函數(shù)之前,可以省略函數(shù)聲明語句;否則在調(diào)用前必須有函數(shù)聲明語句,且聲明語句中必須指明參數(shù)默認(rèn)值。35第第2章章 從從C到到C+以下是幾個采用函數(shù)默認(rèn)值的例子以下是幾個采用函數(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+說明:(1)內(nèi)聯(lián)函數(shù)在被調(diào)用之前必須進(jìn)行完整的定義,否則編譯器將無法知道應(yīng)該插入什么代碼。內(nèi)聯(lián)函數(shù)通常寫在主函數(shù)前。(2)C+的內(nèi)聯(lián)函數(shù)具有與C中的宏定義#define相同的作用和相似的原理,但消除了#define的不安全因素。請看下面兩個例子: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ù)定義時加上inline,編譯系統(tǒng)就一定會將其看作inline函數(shù)。關(guān)鍵字inline只是給編譯系統(tǒng)提供一個建議,希望編譯系統(tǒng)在編譯時能將函數(shù)代碼替換到函數(shù)調(diào)用位置,但是如果函數(shù)中存在循環(huán)語句,s
26、witch語句,或存在數(shù)組定義時,編譯系統(tǒng)將不知道應(yīng)該如何替換,只能將其按照普通函數(shù)處理。 因此,只有那些不包含循環(huán)和switch選擇結(jié)構(gòu),不包含數(shù)組定義,并且代碼行數(shù)較少(建議不超過5行)的函數(shù)才適合設(shè)計成inline函數(shù)。 43第第2章章 從從C到到C+4.函數(shù)重載 在C+中,一個函數(shù)名可以對應(yīng)多個不同的函數(shù)。當(dāng)兩個或兩個以上的函數(shù)共用一個函數(shù)名時,稱為函數(shù)重載 。被重載的函數(shù)稱為重載 函數(shù)。 函數(shù)重載有兩種基本的方式:一種是函數(shù)參數(shù)個數(shù)相同,但類型有所不同的重載,另外一種是函數(shù)參數(shù)個數(shù)也不同的重載。 44第第2章章 從從C到到C+【例211】參數(shù)類型不同的函數(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個max函數(shù)coutmax(10.5,5.0)endl;/調(diào)用第2個max函數(shù) 45第第2章章 從從C到到C+【例2-12】形參個數(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個max函數(shù)coutmax(10,5,2)endl;/調(diào)用第2個max函數(shù)46第第2章章 從從C到到C+注意:(1) 面向?qū)ο笾胁恢С趾瘮?shù)參數(shù)個數(shù)和參數(shù)類型都相同,但函數(shù)返回類型不相同的重載方式。(重載函數(shù)應(yīng)該在參數(shù)個數(shù)或參數(shù)類型上有所不同,否則編譯器沒有辦法確定調(diào)用哪一個重載版本。)(2) 通常重載的函數(shù)應(yīng)該具有相同或相似的功能,不應(yīng)出現(xiàn)兩個同名函數(shù)提供完全不同或差異太大的功能,這樣在編程過程中很容易產(chǎn)生混淆,不利于程序的編寫和閱讀。只有在某個函數(shù)需要處理不同類型的參數(shù)或者不同個數(shù)的參數(shù)時,才需要進(jìn)行重載,其他時候沒有重載的必要。 47第第2章章 從
29、從C到到C+2.5動態(tài)內(nèi)存分配 對于一個程序單元而言,可以有兩種獲得內(nèi)存的方式:靜態(tài)內(nèi)存分配和動態(tài)內(nèi)存分配。前者是在編譯階段就分配好存儲空間,并且這些空間的大小在程序運(yùn)行期間是不可更改的,例如全局變量,數(shù)組等的分配;后者則是由程序員在程序中通過使用內(nèi)存分配函數(shù)或使用內(nèi)存分配運(yùn)算符從系統(tǒng)堆(一塊自由存儲區(qū))中獲取存儲空間。靜態(tài)獲得的內(nèi)存,系統(tǒng)在變量等生命期結(jié)束時自動回收,動態(tài)獲得的空間需要程序員通過語句或運(yùn)算顯式地釋放。48第第2章章 從從C到到C+1.new運(yùn)算符 C語言中使用函數(shù)malloc( )和free( )動態(tài)分配內(nèi)存和釋放動態(tài)分配的內(nèi)存。C+中使用運(yùn)算符new和delete能更好地、
30、更簡單地進(jìn)行內(nèi)存的分配和釋放。 new運(yùn)算符用于動態(tài)分配一塊連續(xù)的內(nèi)存空間,其基本語法形式有: new /*從一塊自由存儲區(qū)中分配一塊sizeof(type)字節(jié)大小的內(nèi)存。*/其中,其中,type可以是可以是C+支持的所有數(shù)據(jù)類型名,可支持的所有數(shù)據(jù)類型名,可以是基本的數(shù)據(jù)類型,也可以是自定義數(shù)據(jù)類型。以是基本的數(shù)據(jù)類型,也可以是自定義數(shù)據(jù)類型。49第第2章章 從從C到到C+ new運(yùn)算符返回一個指向所分配的存儲空間的第1個單元的指針,如果當(dāng)前存儲器沒有足夠的內(nèi)存空間可分配,則返回NULL。例如:int * p1=new int; /分配一個用于存儲1個整型數(shù)據(jù)的連續(xù)區(qū)域,/并將首地址返回給
31、p1使用new可以為數(shù)組動態(tài)分配空間,這時候需要在類型名后加上數(shù)組的大小。 int * p1=new int1;int* p2=new int10; /分配一個整型的一維數(shù)組/ (大小為10個整型數(shù)據(jù)),并將首地址返回給p2int * p3=new int45;/分配一個整型數(shù)組能存儲 /一個45的二維數(shù)組,并將首地址返回給p3使用使用newnew動態(tài)分配內(nèi)存動態(tài)分配內(nèi)存的時候,如果沒有足夠的時候,如果沒有足夠的內(nèi)存滿足分配要求,的內(nèi)存滿足分配要求,newnew將返回空指針將返回空指針(NULL).(NULL).因此,通常要對內(nèi)存的因此,通常要對內(nèi)存的動態(tài)分配是否成功進(jìn)行檢查動態(tài)分配是否成功進(jìn)
32、行檢查50第第2章章 從從C到到C+2.delete運(yùn)算符 對于動態(tài)分配的內(nèi)存在使用完后,一定要及時歸還給系統(tǒng)。如果應(yīng)用程序?qū)τ邢薜膬?nèi)存只取不還,系統(tǒng)很快就會因?yàn)閮?nèi)存枯竭而崩潰。利用new動態(tài)分配的存儲空間通??梢岳胐elete運(yùn)算進(jìn)行釋放。delete運(yùn)算符的基本語法形式有: delete 指針變量 /指針變量中保存的是 / new分配的內(nèi)存首地址delete 指針變量 /釋放動態(tài)分配的數(shù)組存儲區(qū)51第第2章章 從從C到到C+使用delete釋放內(nèi)存空間時,應(yīng)注意以下幾點(diǎn): (1)利用new運(yùn)算符分配的內(nèi)存空間,只許使用一次delete,如果對同一塊空間進(jìn)行多次釋放,將會導(dǎo)致嚴(yán)重錯誤。(2
33、)delete只能用來釋放動態(tài)分配的內(nèi)存空間。52第第2章章 從從C到到C+【例2-13】使用new和delete的例子。#include main()int *p;p=new int;if(!p) /若動態(tài)分配內(nèi)存失敗時, coutallocation failuren; return 1;*p=20;cout*p;delete p;return 0;53第第2章章 從從C到到C+2.6 引用1. 引用的定義與特點(diǎn) 所謂引用,就是給變量取個別名,定義引用的基本格式為:(1)類型 &引用名變量名;(2)類型 &引用名(變量名);引用必須初始化。例如:int n;/定義整型變量n
34、int &refn=n;/為n定義一個別名refn引用與被引用的變量具有相同的地址,因而對引用的存取就是對變量的存取。當(dāng)實(shí)體或引用其中一個發(fā)生變化,另一個也隨之改變。 54第第2章章 從從C到到C+【例214】引用的例子。#include void main() int n=2; int &refn=n;/為n定義一個別名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語言中,實(shí)參和形參之間的數(shù)據(jù)傳遞采用的是單向的值傳遞方式:要求實(shí)參和形參的類型和個數(shù)要一致。實(shí)參將 “單向性”的“值傳遞”給形參。在被調(diào)函數(shù)中對形參的值的修改不會影響到實(shí)參。當(dāng)函數(shù)未被調(diào)用時,形參不占內(nèi)存。當(dāng)函數(shù)被調(diào)用時,為形參分配內(nèi)存,并將實(shí)參的值傳遞給形參;函數(shù)調(diào)用結(jié)束時,釋放形參所占存儲空間。【例214】值傳遞的例子。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+通常,可以利用指針可以解決這一問題?!纠?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的改寫。#include void swap(int
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 24589.1-2024財經(jīng)信息技術(shù)會計核算軟件數(shù)據(jù)接口第1部分:企業(yè)
- GB/T 23718.5-2024機(jī)器狀態(tài)監(jiān)測與診斷人員資格與人員評估的要求第5部分:潤滑劑實(shí)驗(yàn)室技術(shù)人員/分析人員
- SOTS-1-technical-grade-生命科學(xué)試劑-MCE-9410
- N-Propionitrile-Chlorphine-hydrochloride-生命科學(xué)試劑-MCE-1679
- Cy3-PEG-Amine-生命科學(xué)試劑-MCE-8875
- AH-8529-生命科學(xué)試劑-MCE-1699
- 1-2-3-Tri-10-Z-undecenoyl-glycerol-生命科學(xué)試劑-MCE-6075
- 2025年度藥品推廣與醫(yī)藥行業(yè)協(xié)會合作推廣協(xié)議
- 二零二五年度智能制造產(chǎn)業(yè)股權(quán)轉(zhuǎn)移合同終止書
- 2025年度工業(yè)機(jī)器人維護(hù)保養(yǎng)與故障排除維修合同
- 文檔協(xié)同編輯-深度研究
- 七年級數(shù)學(xué)新北師大版(2024)下冊第一章《整式的乘除》單元檢測習(xí)題(含簡單答案)
- 2024-2025學(xué)年云南省昆明市盤龍區(qū)高一(上)期末數(shù)學(xué)試卷(含答案)
- 五年級上冊寒假作業(yè)答案(人教版)
- 2024年財政部會計法律法規(guī)答題活動題目及答案一
- 2025年中考語文復(fù)習(xí)熱搜題速遞之說明文閱讀(2024年7月)
- 和達(dá)投資集團(tuán)(杭州)有限公司招聘筆試沖刺題2025
- 政企單位春節(jié)元宵猜燈謎活動謎語200個(含謎底)
- 綜治工作培訓(xùn)課件
- 2024年云網(wǎng)安全應(yīng)知應(yīng)會考試題庫
- 2024年全國職業(yè)院校技能大賽高職組(智能節(jié)水系統(tǒng)設(shè)計與安裝賽項(xiàng))考試題庫-下(多選、判斷題)
評論
0/150
提交評論