C++程序設(shè)計(jì):第5章 函數(shù)_第1頁
C++程序設(shè)計(jì):第5章 函數(shù)_第2頁
C++程序設(shè)計(jì):第5章 函數(shù)_第3頁
C++程序設(shè)計(jì):第5章 函數(shù)_第4頁
C++程序設(shè)計(jì):第5章 函數(shù)_第5頁
已閱讀5頁,還剩84頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第五章 函 數(shù) 在程序設(shè)計(jì)過程中,為了處理上的方便,通常將一個大程序分成若干個較小的部分,每一部分都具有一特定的功能,這種比較獨(dú)立的功能模塊就可以通過函數(shù)來實(shí)現(xiàn)。在C+語言中,既可以定義全局函數(shù),也可以定義屬于某個類的成員函數(shù)。5.1 函數(shù)的定義和調(diào)用 類型說明符 函數(shù)名(形參表) 函數(shù)體 函數(shù)的定義形式如下:說 明 1: (1)函數(shù)名是唯一標(biāo)識一個函數(shù)的名字,它的命名規(guī)則同變量完全一樣。 說 明 2: (2)形式參數(shù)是用于在調(diào)用函數(shù)和被調(diào)用函數(shù)之間進(jìn)行數(shù)據(jù)傳遞的,因此,它也需要進(jìn)行類型說明。C+語言中,對形參進(jìn)行說明的方式: void disp(int count) cout count;說

2、 明 3: (3)由左、右花括號括起來的部分稱為函數(shù)體,它是函數(shù)功能的程序描述部分。 說 明 4: (4)當(dāng)函數(shù)有返回值時,在函數(shù)名的前面應(yīng)加上返回值的類型說明,而當(dāng)函數(shù)沒有返回值時,在函數(shù)名前應(yīng)加上void說明。 【例5.1】編一函數(shù),求1+1/2+1/3+1/n的值。void count(int n) int i; float sum; if( n=0) cout “n is invalid!”; else sum=0; i=1; while (i=n) sum=sum+1/(float)i; i+; cout sum; 說 明: 當(dāng)函數(shù)沒有返回值時,應(yīng)將其返回值類型說明為void型,否則

3、,在編譯時將給出警告信息。count (20);調(diào)用上面定義的count( )函數(shù),可使用如下語句:函數(shù)名 (實(shí)參表)函數(shù)調(diào)用的一般形式如下:例如5.2 函數(shù)的返回值及類型 有時函數(shù)調(diào)用的目的是為了得到一個計(jì)算結(jié)果,這時通常就需要使用return語句,以便將計(jì)算結(jié)果返回給調(diào)用程序。 return (表達(dá)式);return 表達(dá)式;函數(shù)的返回值類型是由函數(shù)定義時所指定的返回值類型來確定的?;騬eturn語句使用形式如下:例如,求x的n次方的函數(shù)定義如下:double x, y; float a; int b; x=power(a, b); y=power(a, b)+1.23; double p

4、ower(float x, int n) int i; double pw; pw=1; for(i=1;i=n;i+) pw *=x; return(pw); power函數(shù)定義好之后,就可以利用下述方式進(jìn)行調(diào)用:5.2.2 函數(shù)返回指針 函數(shù)不但能夠返回值,也可以返回指針。函數(shù)返回的指針既可以指向一般簡單變量,也可以指向數(shù)組等。 1. 函數(shù)返回指向簡單變量的指針int *func( ) return *p; 返回指向簡單變量的指針的函數(shù)定義形式如下:【例5.2】編寫一個函數(shù),用于返回一個指針,并給出調(diào)用過程。 #include iostream.h int *pfunc(int *p) *

5、p=10; return p; void main( ) int x=5; int *p; p=pfunc(&x); cout *p=*p n; cout x=xa cout “a=” a; /結(jié)果a=5 當(dāng)函數(shù)返回引用或指針時,函數(shù)調(diào)用語句可以出現(xiàn)在賦值語句的左邊。 函數(shù)不能返回自動變量的引用或指針。函數(shù)可以返回動態(tài)申請的變量(對象)、靜態(tài)或全局變量的指針。 int *emitPtr( ) /錯誤用法 int i; return &i; 注意2. 函數(shù)返回指向一維數(shù)組的指針 C+語言不允許函數(shù)返回?cái)?shù)組,但函數(shù)可以返回指向數(shù)組的指針。 例如:int a10;int *f( ) return a

6、; 【例5.4】編一程序,利用函數(shù)所返回的指向一維數(shù)組的指針對數(shù)組進(jìn)行操作。#include iostream.h int * retip(int a ) return a; void main( ) int b5=1,2,3,4,5; int *p= retip(b); for(int i=0;i5;i+) cout ai+1= *(p+i); 3. 函數(shù)返回指向二維數(shù)組的指針 若函數(shù)rettwo需要返回指向34二維整型數(shù)組的指針,則其定義形式如下: int (*rettwo( )4 rettwo的后面是一對圓括號,說明rettwo是函數(shù)名 ;rettwo的前面有*,說明rettwo函數(shù)的返

7、回值是指針 ;該指針指向具有4個元素的數(shù)組 ,數(shù)組的每個元素都是int類型的;該函數(shù)的返回值可以是M4的二維數(shù)組名,M是整型常量。 【例5.5】編一程序,用于說明函數(shù)的返回值是指向二維整型數(shù)組的指針的用法。 #include iostream.hint (*rettwo(int a 4)4 return a;void main( ) int b 4=1,2,3,4,5,6,7,8; int (*p)4, i, j; p=rettwo(b); for(i=0;i2;i+) for(j=0;j4;j+) cout *(*(p+i)+j) ; cout n ; 5.2.3 函數(shù)返回引用 函數(shù)不僅可以

8、返回指針,而且可以返回引用。返回引用的函數(shù)定義形式如下:int a;int &refret( ) return a; 【例5.6】編寫一個函數(shù),用于返回一個引用,并給出調(diào)用過程。#include iostream.h int &pfunc(int &r) return r; void main( ) int x=5; int &p=pfunc(x); p=26; cout p=p n; cout x=x n; x=13; cout p=p n; cout x=xa cout a= a; /結(jié)果a=6 當(dāng)函數(shù)返回引用時,函數(shù)調(diào)用語句可以出現(xiàn)在賦值語句的左邊。 注意:函數(shù)不能將自動類變量作為引用返

9、回 。 5.3 函數(shù)原型在C+語言中,如果函數(shù)的調(diào)用語句出現(xiàn)在函數(shù)的定義之前,則在編譯或運(yùn)行時將會出現(xiàn)錯誤,其原因主要是在調(diào)用函數(shù)時并不知道函數(shù)的定義,包括函數(shù)值類型以及參數(shù)個數(shù)與類型等。為了解決這個問題就需要利用函數(shù)原型說明。 函數(shù)原型說明的格式如下: 函數(shù)原型一般是在函數(shù)體中的說明部分進(jìn)行說明的,它包括函數(shù)值類型(或稱函數(shù)返回值類型)、函數(shù)名以及圓括號和形參表,不包括函數(shù)體。其中形參表可以只給出每個形參的類型而不必給出形參名,即使給出形參名也不必與函數(shù)定義中的形參同名,其作用只是提高程序的可讀性。 函數(shù)值類型 函數(shù)名(形參表);例如,在main函數(shù)中調(diào)用count函數(shù)時,可進(jìn)行如下原型說明

10、:void main( ) float count(int); float s; s=count(20); float count(int n) 以下情況下,可以不在調(diào)用函數(shù)內(nèi)對被調(diào)用函數(shù)的原型進(jìn)行說明: (1) 被調(diào)用函數(shù)的定義位于調(diào)用函數(shù)之前,可以不必說明。float count(int n) float s; return(s); void main( ) float s; s=count(10); (2) +語言允許在所有函數(shù)的外面、文件的開頭對函數(shù)的原型進(jìn)行說明,在調(diào)用函數(shù)中就可以不對被調(diào)用函數(shù)的原型進(jìn)行說明。 float count(int);void main( ) float

11、s; s=count(10); float count(int n) float s; return(s); 5.4 函數(shù)的參數(shù)及其傳遞方式 在調(diào)用函數(shù)時,需要給出函數(shù)的參數(shù),參數(shù)的類型不同,其傳遞方式及其意義也不相同。5.4.1 將值傳遞給函數(shù) 當(dāng)將一簡單變量傳遞給函數(shù)時,實(shí)際傳遞給函數(shù)的是該變量的值,這樣,函數(shù)內(nèi)形參的改變,并不影響與其對應(yīng)的實(shí)參。例如:void myfunc(int a) a=10; void main ( ) int dt; dt=1; myfunc(dt); cout dt n; 由于在main( )函數(shù)中傳遞給myfunc( )函數(shù)的是dt變量的值,因此,myfun

12、c( )函數(shù)調(diào)用結(jié)束以后dt的值仍然為1,而不是10。 5.4.2 將const變量傳遞給函數(shù) 在函數(shù)定義時,如果在形參的說明中使用了const關(guān)鍵字,則表示該形參本身在函數(shù)內(nèi)部是不能改變的,因此,其對應(yīng)的實(shí)參也不能發(fā)生變化。例如:void myfunc(const int a) a=10; /出錯 由于myfunc( )函數(shù)的形參被說明為const int類型,因此,在函數(shù)內(nèi)部是不能對其進(jìn)行修改的,這樣,與其對應(yīng)的實(shí)參自然也就不會被改變。5.4.3 將地址傳遞給函數(shù) 當(dāng)將指針傳遞給函數(shù)時,實(shí)際上就是將地址傳遞給函數(shù),這樣,形參指針?biāo)傅膯卧獌?nèi)容的改變將直接影響到實(shí)參指針?biāo)赶虻膯卧膬?nèi)容。

13、【例5.8】編一程序,用于說明當(dāng)指針作為函數(shù)形參時,形參的改變對實(shí)參的影響。#include void myinc(int *a) *a=1;void main( ) int dt=10; myinc(&dt); cout dt n;執(zhí)行結(jié)果: 1說明:由于在main( )函數(shù)中傳遞給myinc( )函數(shù)的是指針,因此,在myinc( )函數(shù)中對形參所指單元內(nèi)容的修改,將直接影響到與其對應(yīng)的實(shí)參。注意:當(dāng)指針做函數(shù)參數(shù)時,形參指針的改變并不影響與其對應(yīng)的實(shí)參。#include iostream.hint a=10, b=20;void func(int *p) p=&b; /使p指向變量bvo

14、id main( ) int *q; q=&a; /使q指向變量a func(q); cout *q endl; 運(yùn)行結(jié)果: 10 從程序的運(yùn)行結(jié)果可知,形參指針值的改變(即指向另一變量)并不影響與其對應(yīng)的實(shí)參指針。5.4.4 將引用傳遞給函數(shù) 將引用傳遞給函數(shù)的情況同傳地址的情形類似,通過在函數(shù)內(nèi)部使用引用形參,可以改變與引用形參對應(yīng)的實(shí)參的值?!纠?.9】編一程序,用于說明當(dāng)引用作為函數(shù)形參時,形參的改變對實(shí)參的影響。 #include void myfunc (int &a) +a;void main ( ) int dt=10; int &rf=dt; myfunc(rf); /引用

15、cout rf n; /顯示11 myfunc(dt); /引用 coutdtn; /顯示12 執(zhí)行結(jié)果: 11 12說明:當(dāng)引用作為函數(shù)形參時,形參的改變直接影響到與其對應(yīng)的實(shí)參。5.4.5 將數(shù)組傳遞給函數(shù) 將數(shù)組傳遞給函數(shù),實(shí)際上是將數(shù)組的首地址傳遞給函數(shù),因此,將數(shù)組傳給函數(shù)的情形同將指針傳遞給函數(shù)的情形是類似的,即形參數(shù)組元素的改變,將直接影響到與其對應(yīng)的實(shí)參數(shù)組元素。 【例5.10】編一程序,用于說明當(dāng)數(shù)組作為函數(shù)形參時,形參的改變對實(shí)參的影響。 #include int sum_and_clr(int a , int size) /返回?cái)?shù)組元素的合計(jì)并清除數(shù)組元素 int i,

16、sum=0; for (i=0; isize; i+) sum += ai; ai=0; return sum;void main( ) int dt5=10,20,30,40,50,; cout “Sum=” sum_and_clr(dt,5) n; cout “dt0=” dt0 n;執(zhí)行結(jié)果:Sum=150dt0=0說明: (1)當(dāng)對一維數(shù)組作函數(shù)形參進(jìn)行說明時,既可以給出數(shù)組的長度,也可以不給出數(shù)組的長度。在本程序中是利用另一個整型參數(shù)size來表示數(shù)組長度的。 (2)當(dāng)數(shù)組作為形參時,形參數(shù)組元素的改變,將直接影響到與其對應(yīng)的實(shí)參數(shù)組元素。由于傳數(shù)組和傳指針是相同的,所以此程序也可用

17、指針形式來實(shí)現(xiàn): #include int sum_and_dr(int *a, int size) int i,sum=0; for(i=0; isize; i+) sum += *(a+i); *(a+i)=0; return sum;void main( ) int dt5=10,20,30,40,50; cout “Sum=” sum_and_dr(dt,5) n; /顯示150 cout “dt0=” dt0 n; /顯示0若將二維數(shù)組作為函數(shù)參數(shù),則可以采用如下幾種定義形式: (1)以數(shù)組的形式給出形參說明。 void func(int a56, int n) void func(

18、int a 6, int n) 或第一維的長度可以省略,但第二維的長度不能省略 。(2)以指針的形式給出形參說明。void func(int (*a)6, int n) a是指針,指向6元整型數(shù)組;數(shù)組的每個元素都是int型。 采用上述兩種形式定義的函數(shù)func,在其函數(shù)體中既可以以數(shù)組的方式來使用形參數(shù)組a,也可以以指針的方式來使用形參數(shù)組a,同時都能夠以如下方式進(jìn)行調(diào)用:int a56; func(a, 5); 5.5 函數(shù)的遞歸調(diào)用一個函數(shù)調(diào)用另一個函數(shù)被稱為函數(shù)的嵌套調(diào)用,而當(dāng)一個函數(shù)調(diào)用其自身時則被稱為遞歸調(diào)用。遞歸調(diào)用是程序設(shè)計(jì)中常用的方法之一。函數(shù)的遞歸調(diào)用有兩種形式直接遞歸調(diào)用

19、間接遞歸調(diào)用直接遞歸調(diào)用float func(int n) int m; float f; f=func(m); 一個函數(shù)可直接調(diào)用該函數(shù)本身。例如:間接遞歸調(diào)用func1(int n) int m; func2(m); 一個函數(shù)可間接調(diào)用該函數(shù)本身。例如:func2(int x) int y; func1(y); 【例5.11】從鍵盤輸入一非負(fù)整數(shù)n,并求出n!的值。#include iostream.hvoid main( ) int n; long int result; long int fact(int); while(1) cout n; if(n=0) break; result

20、=fact(n); cout Result= x n; r=Xpower(x,n); cout Result= r;double Xpower(float x, int n) if(n = 0) return(1); else return(x*Xpower(x,n-1);5.6 變量的作用域和存儲類變量(數(shù)據(jù))在內(nèi)存中的存儲方法,不同的存儲方法,將影響變量值的存在時間。 變量的定義變量的數(shù)據(jù)類型變量的作用域指一個變量能夠起作用的程序范圍,由變量的定義位置決定的變量的存儲類5.6.1 變量的作用域 塊:是指由左右花括號(和)括起來的區(qū)域。在“塊”內(nèi)定義的變量其作用域局限于所在的“塊”,從所定義

21、的位置開始到所在“塊”結(jié)束為止。變量在“塊”內(nèi)的任何位置都可以定義。 1. 塊作用域具有塊作用域的變量又被稱為局部變量。 例如:int i;for(i=0; i n; i+) int x; for(int i=0; i n; i+) void main( ) for(int i=0;i2;i+) for(int j=0;j3;j+) x的作用域是在for語句的循環(huán)體中 i變量的作用域?yàn)閙ain函數(shù)體,j變量的作用域?yàn)橥鈱觙or語句的循環(huán)體。 i的作用域是for語句所在的塊 【例5.13】編一程序,理解作用域的概念#include iostream.hvoid main( ) for(int r

22、owno=0;rowno5;rowno+) int temp=6; cout rowno tempendl; if(rowno =3) /此處可以引用rowno cout Correct! ; /此處不能訪問temp說明:變量rowno的作用域是main函數(shù)體,而變量temp的作用域則是for循環(huán)體,也就是說,離開了for循環(huán)體,temp變量就是不可見的。 2文件作用域 在函數(shù)外部定義的變量具有文件作用域,也就是從其定義的位置開始到整個文件結(jié)束都有效。 具有文件作用域的變量又被稱為全局變量例如:#include iostream.hint x=1;void f( ) cout X=x;int

23、y=2;void main( ) f( ); cout Y=yn; cout X=x;x和y都是文件作用域的變量,x變量可以在f函數(shù)體中和main函數(shù)體中被訪問,而y變量可以在main函數(shù)體中被訪問。 5.6.2 變量的存儲類 (1)auto存儲類 (2)static存儲類 (3)extern存儲類 (4)register存儲類 在C+語言中,變量的存儲類共有如下四種:1. auto存儲類void func( ) int a; auto int b; auto存儲類,即自動存儲類。在函數(shù)內(nèi)部定義的變量,如果不指定其存儲類,那么它就是auto類變量。例如: 自動類變量是在動態(tài)存儲區(qū)中分配存儲單元

24、的,當(dāng)函數(shù)返回時,自動類變量中存放的數(shù)據(jù)也就消失了。 a和b都是auto存儲類變量 在變量初始化方面,自動類變量在每調(diào)用一次函數(shù)時都要賦一次初值,且自動類變量的默認(rèn)初值不確定?!纠?.14】編寫一程序,每調(diào)用一次函數(shù),顯示一自動類變量中的內(nèi)容,然后為其值加1。#include iostream.h“void test_auto( ) int va=0; cout auto= va n; +va; void main( ) int i; for (i=0; i4; i+) test_auto( ); 運(yùn)行結(jié)果: auto=0 auto=0 auto=0 auto=0 說明:由于va是自動類變量,

25、所以每調(diào)用一次test_auto( )函數(shù),va都被賦予一次初值0,這樣上述程序的顯示結(jié)果總是0。2. static存儲類 static存儲類,即靜態(tài)存儲類。如果某一對象或變量被指定為static存儲類,則在程序執(zhí)行過程中,此對象或變量總是存在。這樣,即使函數(shù)調(diào)用結(jié)束以后,其靜態(tài)對象或靜態(tài)變量仍不消失,仍然保持其數(shù)值。 在函數(shù)內(nèi)部定義靜態(tài)變量時,需要在定義變量的類型說明符的前面加上static關(guān)鍵字,在函數(shù)外面定義的對象或變量,即使其前面沒有static,也是靜態(tài)存儲類;如果在函數(shù)外面定義的變量(即全局變量)其前面加上static,則稱為靜態(tài)外部變量,靜態(tài)外部變量的作用域僅僅局限在該變量所定義

26、的文件中,而在其它文件中是不能訪問的。 說明 靜態(tài)存儲類對象或變量是在靜態(tài)存儲區(qū)中分配存儲單元的,因此在函數(shù)調(diào)用結(jié)束時,它的值并不消失。 在變量初始化方面,靜態(tài)變量是在編譯過程中賦初值的,且只賦一次初值。【例5.15】編寫一程序,每調(diào)用一次函數(shù),顯示一靜態(tài)局部變量中的內(nèi)容,然后為其值加1。#include iostream.h void test_static( ) static int vs=0; cout static= vs n; +vs; void main( ) int i; for (i=0; i4; i+) test_static( ); 執(zhí)行結(jié)果 : static=0 stat

27、ic=1 static=2 static=3說明:由于vs是靜態(tài)局部變量,所以它僅在程序編譯階段賦一次初值,在函數(shù)調(diào)用結(jié)束之后仍然能保持其原來的值,因此其運(yùn)行結(jié)果與上面介紹的自動類變量是不同的。 3. register存儲類 register存儲類,即寄存器存儲類。為了提高某些自動類變量或函數(shù)參數(shù)的處理速度,可以在定義這些變量的類型說明符的前面加上register關(guān)鍵字,以通知編譯系統(tǒng)為這些變量分配寄存器來存放其值。 例如: void test_r(register int n) register char c; register int n;可以簡寫為 register n; 實(shí)際可用的寄存

28、器數(shù)受硬件特性的限制,所以并不是所有寄存器變量都能夠保存在寄存器中。 能夠說明為寄存器類變量的數(shù)據(jù)類型是有限制的,一般常用的有char、int、short int和unsigned int等。 4. extern存儲類 extern存儲類,即外部存儲類。如果在一個文件中要引用另一個文件中定義的外部變量,則在此文件中應(yīng)用extern關(guān)鍵字把此變量說明為外部的。 例如: extern int a; /a為別的文件中定義的外部變量 void func( ) a=100; 外部變量的定義和說明:(2)外部變量的說明 extern int mydata; /外部變量的說明 void main ( ) (

29、1)外部變量的定義 int mydata; /外部變量的定義 void func( ) 大型程序?yàn)榱艘子诰S護(hù)和理解,通常需要把程序劃分為多個文件來保存,每個文件都可以單獨(dú)編譯,最后再把多個文件的編譯結(jié)果(即目標(biāo)文件)連接到一起來生成一個可執(zhí)行程序。這種情況下,如果在一個文件中需要引用另一個文件中的外部變量,就需要利用extern說明。 5.7 無參函數(shù)和缺省(默認(rèn))參數(shù) 無參函數(shù),顧名思義就是沒有參數(shù)的函數(shù)。無參函數(shù)可用如下兩種方法中的任一個來進(jìn)行說明: 在C+語言中,在對函數(shù)進(jìn)行調(diào)用時,可以省略參數(shù),此時將取缺省值作為未指定的參數(shù)的值。要想使用缺省參數(shù)值,必須在函數(shù)說明時來指定缺省參數(shù)的值,

30、而函數(shù)定義不發(fā)生任何變化。 (1)int myfunc( );(2)int myfunc(void);例 如:disp( )函數(shù)經(jīng)過上述說明和定義之后,可以使用如下一些形式來進(jìn)行調(diào)用:void disp(int a=100, int b=200);void disp(int a, int b) cout “a=” a “b=” b n;disp(10,20); /通常的調(diào)用disp(10); /同disp(10,200)disp( ); /同disp(100,200)在函數(shù)說明中可以只對部分參數(shù)給出缺省參數(shù)值注意:當(dāng)只對部分參數(shù)給出缺省參數(shù)值時,則必須從右開始連續(xù)設(shè)置,而且在調(diào)用時,對于那些沒

31、有指定缺省參數(shù)值的參數(shù),必須要提供參數(shù)值。void disp(int a, int b=200);disp(100); /同disp(100,200)對上述disp函數(shù)的調(diào)用只有如下兩種形式:disp(100, 120); /通常的調(diào)用或者使用默認(rèn)參數(shù)時需要注意如下幾個問題: (1)當(dāng)函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之前時,默認(rèn)形參值必須在函數(shù)原型(說明)中給出;而當(dāng)函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之后時,默認(rèn)形參值在函數(shù)定義的形參表中給出即可。 例如:#include iostream.h“int multwo(int a=7,int b=8);int main() cout multwo(); /調(diào)用位于定義

32、之前int multwo(int x, int y) return x*y; #include iostream.h“ int multwo(int =7,int =8); /不給出形參名 int main() cout multwo(); /調(diào)用位于定義之前 int multwo(int x,int y) return x*y; 或如果函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之后,則默認(rèn)形參值在函數(shù)定義的形參表中給出即可。#include iostream.hint multwo(int x=7,int y=8) return x*y;int main() cout multwo(); /調(diào)用位于定義之后如果

33、函數(shù)調(diào)用出現(xiàn)在函數(shù)定義之后,同時又在函數(shù)定義的前面給出了函數(shù)原型,則既可以在函數(shù)定義的形參表中給出默認(rèn)值,又可以在函數(shù)原型中給出默認(rèn)值,但不能同時給出。#include iostream.hint multwo(int =7,int =8);int multwo(int x, int y) return x*y;int main() cout multwo(); /調(diào)用位于定義之后(2)在使用默認(rèn)形參時,需要注意默認(rèn)形參的作用域。在相同的作用域內(nèi),默認(rèn)形參值的說明應(yīng)保持唯一,但如果不在相同的作用域內(nèi),則允許說明不同的默認(rèn)形參。 #include iostream.hint multwo(int

34、 =7,int =8);void main( ) void func( ); int multwo (int =10,int =20); cout multwo ( ) n; /使用局部默認(rèn)形參值(實(shí)現(xiàn)10*20) func( );void func( ) cout b) return a; else return b;double max(double a, double b) /函數(shù)定義 if (a b) return a; else return b;定義了兩個max( )函數(shù)以后,當(dāng)在程序中調(diào)用這兩個函數(shù)時,系統(tǒng)將根據(jù)所給定的參數(shù)類型,自動選擇所要調(diào)用的max( )函數(shù)。函數(shù)能夠進(jìn)行重

35、載的條件有兩個: (1)函數(shù)的參數(shù)個數(shù)不同:當(dāng)兩個函數(shù)的參數(shù)個數(shù)不同時可以進(jìn)行重載。 (2)函數(shù)的參數(shù)類型不同:當(dāng)兩個函數(shù)的參數(shù)類型不同時可以進(jìn)行重載。進(jìn)行重載函數(shù)設(shè)計(jì)時,需要注意問題1: (1)函數(shù)的返回值類型不能作為可否重載的判斷條件。 盡管這兩個函數(shù)的返回值類型不同,但不能對其進(jìn)行重載,因?yàn)樵跊]有調(diào)用函數(shù)之前,C+語言是無法判斷要調(diào)用其中的哪個函數(shù)。 float calculate(int x, int y); int calculate(int a, int b);例如:進(jìn)行重載函數(shù)設(shè)計(jì)時,需要注意問題2: (2)當(dāng)函數(shù)的重載與函數(shù)的缺省參數(shù)一起使用時,有可能引起函數(shù)重載的非法定義。上

36、述兩個draw( )函數(shù)盡管參數(shù)個數(shù)不同,但由于缺省參數(shù)的原因,進(jìn)行 draw(100,200);調(diào)用時,編譯器無法確定應(yīng)該調(diào)用哪一個函數(shù)。void draw(int x=10,int y=20,int z=30);void draw(int x,int y);非法的例如:5.9 inline(內(nèi)聯(lián))函數(shù) inline函數(shù)又稱為內(nèi)聯(lián)函數(shù),或內(nèi)置函數(shù),就是在編譯時把該函數(shù)的程序代碼插入到調(diào)用該函數(shù)的語句所在的位置上,以便在程序執(zhí)行時不再進(jìn)行函數(shù)調(diào)用,其作用和宏定義類似。 定義inline函數(shù)的方法是在一般函數(shù)定義的前面加上inline關(guān)鍵字。inline函數(shù)可避免宏定義所帶來的副作用而程序中有下面的賦值語句Z=x+1*x+1*2;則經(jīng)過預(yù)處理程序?qū)赀M(jìn)行展開后,將變?yōu)槿缦碌男问剑篫=SQR(x+1)*2;若有如下宏定義#define SQR(A)

溫馨提示

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

評論

0/150

提交評論