




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1第第1章內(nèi)容回顧章內(nèi)容回顧vC 和 C+起源 C 的優(yōu)缺點(diǎn) 過程化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì) 最簡單的C+程序2第2章引用和函數(shù)的高級用法引用和函數(shù)的高級用法3本章目標(biāo)本章目標(biāo)v學(xué)完本章內(nèi)容以后,你將能夠?qū)+引用,重載函數(shù),內(nèi)聯(lián)函數(shù),默認(rèn)參數(shù)的函數(shù),遞歸函數(shù)有個(gè)深刻的理解掌握和應(yīng)用。 引用的優(yōu)點(diǎn)和使用方法 函數(shù) 內(nèi)聯(lián)函數(shù) 重載函數(shù) 默認(rèn)參數(shù)函數(shù) 遞歸函數(shù)4本章結(jié)構(gòu)本章結(jié)構(gòu)引用和函數(shù)的高級用法引用和函數(shù)的高級用法引用引用引用概念引用概念操作引用操作引用引用條件引用條件引用傳遞函數(shù)參數(shù)引用傳遞函數(shù)參數(shù)函數(shù)多個(gè)返回值函數(shù)多個(gè)返回值const 限制限制高級函數(shù)特性高級函數(shù)特性內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)遞歸函
2、數(shù)遞歸函數(shù)重載函數(shù)重載函數(shù)默認(rèn)參數(shù)的函數(shù)默認(rèn)參數(shù)的函數(shù)52-1-1 引用的概念引用的概念 1 1、創(chuàng)建引用的格式:、創(chuàng)建引用的格式:Type & Type & 變量名變量名 = = 引用的變量引用的變量 例:例:int a =10; int a =10; int& ret = a;int& ret = a;2 2、引用的使用:、引用的使用:與一般變量的使用格式相同與一般變量的使用格式相同 例:例:cout ret endl;cout ret endl;3 3、引用的特點(diǎn)、引用的特點(diǎn)引用引用: :引用的實(shí)質(zhì)是某變量的別名;引用的實(shí)質(zhì)是某變量的別名;對引用的操作實(shí)質(zhì)
3、是對所引用變量的操作對引用的操作實(shí)質(zhì)是對所引用變量的操作引用的地址與所引用變量的地址相同引用的地址與所引用變量的地址相同注意:&只有在聲明引用時(shí)是引用操作符只有在聲明引用時(shí)是引用操作符, ,其他時(shí)候都是地址操作符其他時(shí)候都是地址操作符62-1-2 引用的使用引用的使用 int a = 10;int &ret; /錯(cuò)誤錯(cuò)誤int &ret = a;cout a: a ret: retendl; cout &ret: &ret &a:&a endl; ret = 30; cout a: a ret:retendl; int& ret2
4、 = 10; /錯(cuò)誤錯(cuò)誤const int & ret2 = 10;輸出結(jié)果輸出結(jié)果相同相同輸出結(jié)果輸出結(jié)果相同相同1、聲明引用時(shí)必須初始化2、C+沒有提供訪問引用本身地址的方法,引用取地址所取得的地址與取得變量的地址相同2、引用的類型與所引用變量的類型必須一致72-1-2 引用的使用引用的使用通過引用修改變量的值int intOne;int& rInt=intOne;intOne=5;cout &intOne: &intOne endl;cout &rInt: &rInt endl;int intTwo=8;rInt=intTwo;cout i
5、ntOne: intOne endl;cout intTwo: intTwo endl;cout rInt: rInt endl;cout &intOne: &intOne endl;cout &intTwo: &intTwo endl;cout &rInt: &rInt endl;運(yùn)行結(jié)果運(yùn)行結(jié)果:&intOne: 0 x0012ff28&rInt: 0 x0012ff28intOne:8intTwo:8rInt:8&intOne: 0 x0012ff28 &intTwo:0 x0012ff20&rInt
6、: 0 x0012ff281、引用一旦初始化,它就維系在一定的目標(biāo)上,再也不分開2、引用與指針的區(qū)別:指針?biāo)赶虻牡刂房勺?,引用與變量的關(guān)系不變;指針聲明時(shí)可不初始化,引用聲明時(shí)必須初始化;82-1-3 指針引用指針引用 int a = 10,b = 20;int *p = &b; int *& ret2 = p; int &* ret4 = &ret2; /錯(cuò)誤cout“*&ret2:”ret2“&b:”&bendl; ret2 = &a;cout“p:”p“ ”“&a:”&a“ ”“ret2:”ret2endl
7、; 1、指針也是變量,所以可以有指針變量的引用:2、指針引用保存的是指針的內(nèi)容(變量的地址)3、通過指針引用改變了原指針的指向的地址4、指針引用的特性與指針相類似,與一般引用不同注意:當(dāng)一個(gè)引用所引用的是一個(gè)指針時(shí)(指針引用),此時(shí)引用的用法與指針一樣9引用的常見錯(cuò)誤引用的常見錯(cuò)誤1、 void&a;有void指針沒有void引用2、 int a10; int& ra10 = a; 3、int a; int& ra = a; int& *p = &ra; 有指針的引用和指針的指針,沒有引用的指針和引用的引用4、 int& ri = NULL; 有
8、空指針無空引用5、 int& ra = int; 引用不能用類型來初始化102-1-4 引用作函數(shù)參數(shù)引用作函數(shù)參數(shù) v 傳遞引用給函數(shù)與傳遞指針的效果一樣(傳址調(diào)用)v 用引用作為參數(shù)比使用指針要容易理解 用引用實(shí)現(xiàn)swap函數(shù):void swap(int&x ,int& y) int temp; temp = x; x = y; y = temp; 調(diào)用:調(diào)用:int a = 10,b = 20; swap(a,b); 11函數(shù)調(diào)用傳值調(diào)用(值傳遞)傳值調(diào)用(值傳遞):方法內(nèi)的改變不會(huì)影響到方法外:方法內(nèi)的改變不會(huì)影響到方法外: : 函數(shù)在被調(diào)用以前,函數(shù)在被調(diào)用以
9、前,形參變量并不占內(nèi)存單元,當(dāng)函數(shù)被調(diào)用時(shí),形參變量分配有存儲(chǔ)單元,并將形參變量并不占內(nèi)存單元,當(dāng)函數(shù)被調(diào)用時(shí),形參變量分配有存儲(chǔ)單元,并將相應(yīng)的實(shí)參變量存儲(chǔ)單元的值復(fù)制到形參變量單元。所以,被調(diào)函數(shù)在執(zhí)行過相應(yīng)的實(shí)參變量存儲(chǔ)單元的值復(fù)制到形參變量單元。所以,被調(diào)函數(shù)在執(zhí)行過程中,如果形參變量的值發(fā)生了變化,并不影響實(shí)參變量的值。程中,如果形參變量的值發(fā)生了變化,并不影響實(shí)參變量的值。傳址調(diào)用(引用傳遞):傳址調(diào)用(引用傳遞):方法內(nèi)的改變會(huì)影響到方法外方法內(nèi)的改變會(huì)影響到方法外把實(shí)參在內(nèi)存中的地址傳給了形參,在被調(diào)函數(shù)中,如果改變了形參某元素的把實(shí)參在內(nèi)存中的地址傳給了形參,在被調(diào)函數(shù)中,如
10、果改變了形參某元素的值,在被調(diào)函數(shù)中,實(shí)參對應(yīng)元素的值也會(huì)發(fā)生相應(yīng)的改變。值,在被調(diào)函數(shù)中,實(shí)參對應(yīng)元素的值也會(huì)發(fā)生相應(yīng)的改變。傳值調(diào)用與傳址調(diào)用的區(qū)別:傳值調(diào)用與傳址調(diào)用的區(qū)別:使用傳值調(diào)用時(shí),函數(shù)接收的是函數(shù)值的一份拷使用傳值調(diào)用時(shí),函數(shù)接收的是函數(shù)值的一份拷貝;另一方面,使用傳址調(diào)用時(shí),函數(shù)接收的是變量的內(nèi)存地址。因此,函數(shù)貝;另一方面,使用傳址調(diào)用時(shí),函數(shù)接收的是變量的內(nèi)存地址。因此,函數(shù)能改變存放于指定內(nèi)存單元(也就是變量值)的值,所作的改變在函數(shù)結(jié)束后能改變存放于指定內(nèi)存單元(也就是變量值)的值,所作的改變在函數(shù)結(jié)束后繼續(xù)保留下來。繼續(xù)保留下來。C+C+中的傳值與傳址中的傳值與傳址
11、如果函數(shù)定義時(shí):形參類型為基本類型、一般結(jié)構(gòu)體是傳值調(diào)用如果函數(shù)定義時(shí):形參類型為基本類型、一般結(jié)構(gòu)體是傳值調(diào)用如果函數(shù)定義時(shí):形參類型為數(shù)組、指針、引用是傳址調(diào)用如果函數(shù)定義時(shí):形參類型為數(shù)組、指針、引用是傳址調(diào)用122-1-4 引用作函數(shù)參數(shù)引用作函數(shù)參數(shù) 傳遞引用給函數(shù)的內(nèi)存布局把引用作形參,則將做實(shí)參的一般變量傳給形參時(shí),傳入到形參的是實(shí)把引用作形參,則將做實(shí)參的一般變量傳給形參時(shí),傳入到形參的是實(shí)參的別名,通過別名對變量進(jìn)修改,就會(huì)將實(shí)參的值修改了參的別名,通過別名對變量進(jìn)修改,就會(huì)將實(shí)參的值修改了132-1-4 引用作函數(shù)參數(shù)引用作函數(shù)參數(shù) 潛在問題 因?yàn)閷⒁米鳛楹瘮?shù)參數(shù)時(shí),函數(shù)
12、調(diào)用與一般函數(shù)調(diào)用一致,但是所產(chǎn)生的效果卻不一樣(一個(gè)傳值,一個(gè)傳址),所以當(dāng)我們不想在函數(shù)中改變時(shí),使用引用作為參數(shù)就可能改變參數(shù) int a=5;int b=6;fun(a,b);調(diào)用形式和非調(diào)用形式和非引用參數(shù)的函引用參數(shù)的函數(shù)是一樣的數(shù)是一樣的解決辦法解決辦法:void fun(const int& x ,const int& y)142-1-5 引用作返回值引用作返回值 問題:函數(shù)返回值時(shí),要生成一個(gè)值的副本,并且系統(tǒng)要執(zhí)行將這個(gè)副本調(diào)入調(diào)用函數(shù)。有沒有辦法提高系統(tǒng)效率呢? 使用引用作為參數(shù)和返回值給函數(shù)的意義 而用引用返回值時(shí),不生成值的副本,所以提高了效率 int
13、 temp; float& fn2(float r) / 返回引用返回引用 temp = r*r*3.14;return temp;152-1-5 利用引用返回值利用引用返回值 返回值和返回引用的內(nèi)存對比返回?cái)?shù)值返回?cái)?shù)值返回引用返回引用162-1-5 引用作返回值引用作返回值 v 注意注意: 如果返回不在作用域范圍內(nèi)的變量或?qū)ο蟮囊媚蔷陀袉栴}了。這與返如果返回不在作用域范圍內(nèi)的變量或?qū)ο蟮囊媚蔷陀袉栴}了。這與返回一個(gè)局部作用域指針的性質(zhì)一樣嚴(yán)重回一個(gè)局部作用域指針的性質(zhì)一樣嚴(yán)重float& fn2(float r)float temp;temp=r*r*3.14;retur
14、n temp; /返回局部變量的引用返回局部變量的引用int main()float &d=fn2(5.0); /警告,返回的引用是個(gè)局部變量警告,返回的引用是個(gè)局部變量 cout d endl; return 0;172-1-5 引用作返回值引用作返回值 v 解決辦法:返回全局變量的引用解決辦法:返回全局變量的引用float s;float& fn2(float r) s = r*r*3.14; return s; int main() float r = 5.0; float &d=fn2(r); /正確正確cout d endl; return 0;182-1-5
15、 引用作返回值引用作返回值 v 解決辦法:將形參設(shè)置為引用解決辦法:將形參設(shè)置為引用float& fn2(float &r) r = r*r*3.14; return r; int main() float r = 5.0; float &d=fn2(r); /正確正確cout d endl; return 0;19利用引用返回值解決辦法:解決辦法:將返回值存入引用形參將返回值存入引用形參void add(int a,int b,int &result) result = a + b; int main()int a = 10,b = 20,ret;add(a,
16、b, ret);couttemp: ret endl;202-1-6 const 限制限制 v傳遞指針和引用更大的目的是效率v傳遞的地址特征使得所傳的參數(shù)處于隨時(shí)被修改的危險(xiǎn)之中 保護(hù)實(shí)參不被修改的辦法是傳遞const 指針和引用 引用總是const的 如果對引用應(yīng)用關(guān)鍵詞const,其作用就是使目標(biāo)成為const變量21const int& add(int& a,const int& b) /return b += a; / 錯(cuò)誤錯(cuò)誤return a += b; int main() int a = 10,b = 20; const int& result2
17、= add(a,b); cout result2 = result2 endl; / result2 = 80; /錯(cuò)誤錯(cuò)誤int result = add(a,b); / 正確正確cout result = result endl;result = 80; /正確正確const 限制限制22結(jié)構(gòu)與引用結(jié)構(gòu)與引用使用結(jié)構(gòu)引用作為參數(shù)傳遞使用結(jié)構(gòu)引用作為參數(shù)傳遞:#include using namespace std;struct studentchar name10;int sno;void getStudent(struct student & stu) coutplease in
18、put name ; coutplease input sno stu.sno;void show(struct student & stu) coutname is: sno is:stu.snosno = sno; int getsno() const / this-sno = 20; /常函數(shù)中不能改變類成員的值 return this-sno; ;int main() student s(10); int sno = s.getsno(); cout sno = sno endl;const 限制限制24階段總結(jié)階段總結(jié)引用可以提高程序的可讀性在
19、大對象時(shí),引用可以提高效率引用可以變相增加函數(shù)的返回值數(shù)組不可以引用 避免返回局部變量的引用可以返回結(jié)構(gòu)的引用25階段練習(xí)階段練習(xí)J一個(gè)變量可以有多少個(gè)引用?J為什么不要返回局部變量的引用?J引用為什么總是const的?26返回值返回值函數(shù)函數(shù)輸入數(shù)據(jù)流輸入數(shù)據(jù)流輸出數(shù)據(jù)流輸出數(shù)據(jù)流函數(shù)能夠從輸入數(shù)據(jù)或參數(shù)函數(shù)能夠從輸入數(shù)據(jù)或參數(shù)獲得信息獲得信息參數(shù)參數(shù)函數(shù)處理完的信息用函數(shù)處理完的信息用返回值或輸出數(shù)據(jù)流返回值或輸出數(shù)據(jù)流輸出輸出2-2 函數(shù)函數(shù)27內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)v 函數(shù)調(diào)用與堆棧1)編譯器一般使用棧來存放函數(shù)的參數(shù),局部變量等來實(shí)現(xiàn)函數(shù)調(diào)用。有時(shí)候函數(shù)有嵌套調(diào)用,這個(gè)時(shí)候棧中會(huì)有多個(gè)函數(shù)
20、的信息,每個(gè)函數(shù)占用一個(gè)連續(xù)的區(qū)域。一個(gè)函數(shù)占用的區(qū)域被稱作幀。 28內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù) 從上面的圖中我們可以看出每一次函數(shù)的調(diào)用都涉及到:1、系統(tǒng)在函數(shù)調(diào)用前為函數(shù)所分配的幀2、系統(tǒng)在函數(shù)調(diào)用完成時(shí)將幀回收 問題:如果一個(gè)函數(shù)的代碼量很少,只有幾行代碼,但是系統(tǒng)也要為其執(zhí)行相同的操作,有沒有辦法減少系統(tǒng)的這部分開銷呢?(將這部分代碼嵌入調(diào)用函數(shù)之中)fn1()fn1()fn1()fn1()fn1();語句;fn1();mfunc();fn1();funcy();main()main()重復(fù)地放到函數(shù)中的代碼放在內(nèi)聯(lián)函數(shù)中的代碼292-2-1 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)的特點(diǎn):內(nèi)聯(lián)函數(shù)從源代碼層看
21、,有函數(shù)的結(jié)構(gòu),而在編譯后,卻不具備函數(shù)的性質(zhì)。編譯時(shí),類似宏替換,使用函數(shù)體替換調(diào)用處的函數(shù)名。注意:能否形成內(nèi)聯(lián)函數(shù),需要看編譯器對該函數(shù)定義的具體處理。內(nèi)聯(lián)函數(shù)的定義:inline tablefunction(int i) return i*i;使用內(nèi)聯(lián)函數(shù)的時(shí)候要注意:1.遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)2.內(nèi)聯(lián)函數(shù)只適合于不存在while和switch等復(fù)雜的結(jié)構(gòu)且只有15條語句的小函數(shù),否則編譯系統(tǒng)將該函數(shù)視為普通函數(shù)。3.內(nèi)聯(lián)函數(shù)只能先定義后使用,因?yàn)閮?nèi)聯(lián)函數(shù)的代碼必須在被替換之前已經(jīng)生成被替換的代碼。 否則編譯系統(tǒng)也會(huì)把它認(rèn)為是普通函數(shù)。4.對內(nèi)聯(lián)函數(shù)不能進(jìn)行異常的接口聲明。30v
22、2-2-1 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)#includeusing namespace std;inline int isnumber(char ch)return (ch = 0 & ch = 9)?1:0;int main()char c; while(c=cin.get()!=n) if(isnumber(c) /調(diào)用一個(gè)小函數(shù)調(diào)用一個(gè)小函數(shù) cout you entered a digit n; else cout you entered a non-digit n; 312-2-1內(nèi)聯(lián)函數(shù)與宏定義 v 宏定義的缺陷宏定義的缺陷 宏只是告訴編譯器簡單的替代代碼宏只是告訴編譯器簡單的替代代碼
23、,不檢查參數(shù)類型不檢查參數(shù)類型, 往往造成語句的實(shí)際結(jié)果不能代表程序員的意圖(例)往往造成語句的實(shí)際結(jié)果不能代表程序員的意圖(例) 宏的作用可以用內(nèi)聯(lián)函數(shù)代替宏的作用可以用內(nèi)聯(lián)函數(shù)代替: #define JFT(x) (x)*(x)通過一個(gè)內(nèi)聯(lián)函數(shù)可以得到所有宏的替換功能和所有可預(yù)見的狀態(tài)以及常規(guī)通過一個(gè)內(nèi)聯(lián)函數(shù)可以得到所有宏的替換功能和所有可預(yù)見的狀態(tài)以及常規(guī)函數(shù)的類型檢查:函數(shù)的類型檢查: inline int JFT(int a, int b) return a*b;322-2-2 重載函數(shù)重載函數(shù)問題:在C中,每個(gè)函數(shù)必須有其唯一的名字。例:求不同數(shù)據(jù)類型的絕對值,必須定義多個(gè)不同名的
24、函數(shù)解決不同類型數(shù)據(jù)的求絕對值問題。 int abs(int); long labs(long); double fabs(double);這幾個(gè)函數(shù)所做的事情是一樣的,都是求絕對值,但卻要定義不同的函數(shù)名,給函數(shù)的調(diào)用帶來了不方便 函數(shù)重載:函數(shù)重載:在同一范圍中,在函數(shù)定義時(shí),有兩個(gè)以上的函數(shù),取相同的函數(shù)在同一范圍中,在函數(shù)定義時(shí),有兩個(gè)以上的函數(shù),取相同的函數(shù)名,但是形參的個(gè)數(shù)、類型、順序不同。在函數(shù)調(diào)用時(shí),編繹器根據(jù)實(shí)參和形參名,但是形參的個(gè)數(shù)、類型、順序不同。在函數(shù)調(diào)用時(shí),編繹器根據(jù)實(shí)參和形參的類型、個(gè)數(shù)、順序不同而自動(dòng)選擇最佳匹配,自動(dòng)確定調(diào)用哪一個(gè)函數(shù),這就的類型、個(gè)數(shù)、順序不
25、同而自動(dòng)選擇最佳匹配,自動(dòng)確定調(diào)用哪一個(gè)函數(shù),這就是函數(shù)的重載。是函數(shù)的重載。 332-2-2 重載函數(shù)重載函數(shù)v求絕對值的例子求絕對值的例子: int abs(int); long abs(long); double abs(double);v C+用一種函數(shù)命名技術(shù)可以準(zhǔn)確判斷出應(yīng)該使用哪個(gè)abs()函數(shù)。 abs(-10);/調(diào)用int abs(int); abs(-1000000);/調(diào)用long abs(long); abs(-12.23);/調(diào)用double abs(double);34v匹配重載函數(shù)規(guī)則匹配重載函數(shù)規(guī)則 尋找一個(gè)嚴(yán)格的匹配,如果找到了,就用那個(gè)函數(shù)。 通過內(nèi)部轉(zhuǎn)換
26、尋求一個(gè)匹配,只要找到了,就用那個(gè)函數(shù)。2-2-2 重載函數(shù)重載函數(shù)void print(double);void print(int);print(1); /匹配匹配void print(int);print(1.0); /匹配匹配void print(double);print(a); /匹配匹配void print(int);print(31415f); /匹配匹配void print(double);35對于重載函數(shù)對于重載函數(shù)print()聲明,其下面的函數(shù)調(diào)用將引起錯(cuò)誤聲明,其下面的函數(shù)調(diào)用將引起錯(cuò)誤2-2-2 重載函數(shù)重載函數(shù)#includeusing namespace std
27、;void print(long a) cout a endl;void print(double a) cout a 2) return (flb(x -1)+flb(x-2);/直接遞歸直接遞歸 else return 1; 40遞歸調(diào)用例:用遞歸實(shí)現(xiàn)的計(jì)算階乘的例:用遞歸實(shí)現(xiàn)的計(jì)算階乘的C+C+函數(shù):函數(shù):int RecursiveFactorial(int n) int RecursiveFactorial(int n) if (n = 0)if (n = 0)return 1;return 1;else return n else return n * * RecursiveFact
28、orial(n - 1); RecursiveFactorial(n - 1); 41遞歸調(diào)用遞歸調(diào)用422-2-3 遞歸函數(shù)遞歸函數(shù)遞歸的條件遞歸的條件遞歸函數(shù)的結(jié)構(gòu)遞歸函數(shù)的結(jié)構(gòu)(1 1) 要有遞歸終止條件檢查要有遞歸終止條件檢查(2 2) 如果不滿足遞歸終止的條件,則返回涉及遞歸調(diào)用的表達(dá)式如果不滿足遞歸終止的條件,則返回涉及遞歸調(diào)用的表達(dá)式 (3) (3) 先測試,后遞歸調(diào)用先測試,后遞歸調(diào)用int RecursiveFactorial(int n) if (n = 0) /遞歸終止的條件遞歸終止的條件return 1;else return n * RecursiveFactoria
29、l(n - 1); /不滿足條件返回遞歸調(diào)用不滿足條件返回遞歸調(diào)用 432-2-3 遞歸函數(shù)遞歸函數(shù)v 消去遞歸消去遞歸 大多數(shù)遞歸函數(shù)都能用非遞歸函數(shù)來代替。大多數(shù)遞歸函數(shù)都能用非遞歸函數(shù)來代替。計(jì)算階乘的計(jì)算階乘的C+函數(shù),它是用循環(huán)來實(shí)現(xiàn)的:函數(shù),它是用循環(huán)來實(shí)現(xiàn)的:int Factorial(int n) int result = 1; int i; for (i = 1; i = n; i+) result *= i;return result; 442-2-3 遞歸函數(shù)遞歸函數(shù)v遞歸的評價(jià) 遞歸的目的是簡化程序設(shè)計(jì),使程序易讀 遞歸增加了系統(tǒng)開銷現(xiàn)代程序設(shè)計(jì)的目標(biāo)主要是可讀性好。對
30、于嵌入式來說,由于系統(tǒng)性能有限,用遞歸要慎重452-2-4 參數(shù)默認(rèn)的函數(shù)參數(shù)默認(rèn)的函數(shù)v C+中在定義函數(shù)時(shí),可以給形參設(shè)置默認(rèn)值: int add(int x = 5,int y = 6,int z = 3);v 在調(diào)用時(shí),則可以省略部分參數(shù) main( ) add( ); /所有這三個(gè)參數(shù)都采用默認(rèn)值所有這三個(gè)參數(shù)都采用默認(rèn)值 add( 1,5); /第三個(gè)參數(shù)采用默認(rèn)值第三個(gè)參數(shù)采用默認(rèn)值add(1,2,3); /不使用默認(rèn)值不使用默認(rèn)值462-2-4 參數(shù)默認(rèn)的函數(shù)參數(shù)默認(rèn)的函數(shù)v默認(rèn)參數(shù)的順序規(guī)定默認(rèn)參數(shù)的順序規(guī)定 如果一個(gè)函數(shù)中有多個(gè)默認(rèn)參數(shù),則形參分布中,默認(rèn)參數(shù)應(yīng)從右至左逐漸定義。當(dāng)調(diào)用函數(shù)時(shí),也只能從右向左匹配參數(shù)。例如: 對于第2個(gè)函數(shù)聲明,其調(diào)用的方法規(guī)定為:void func(int a=1,int b,int c=3,int d=4); /errorvoid func(int a,int b=2,int c=3,int d=4); /okfunc(10,15,20,30);/0k:調(diào)用時(shí)給出所有實(shí)參:調(diào)用時(shí)給出所有實(shí)參func();/error:參數(shù):參數(shù)a沒有默認(rèn)值沒有默認(rèn)值func(12,12); /ok:參數(shù):參數(shù)c和和d默認(rèn)默認(rèn)func(2,15,20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 過繼協(xié)議書范本
- 輻射貼模具合同協(xié)議
- 還款貸款協(xié)議書范本
- 普查保密協(xié)議書
- 退林還耕協(xié)議合同書范本
- 車車輛銷售合同協(xié)議
- 星星獎(jiǎng)勵(lì)協(xié)議書
- 死者債權(quán)協(xié)議書
- 遺贈(zèng)扶養(yǎng)協(xié)議書合同
- 遠(yuǎn)程雇用協(xié)議性合同
- 高職健康評估教學(xué)模式創(chuàng)新的探索與實(shí)踐
- 消防救援-消防火場供水
- 地鐵防淹門系統(tǒng)的方案比選和設(shè)計(jì)
- 辦理證件協(xié)議書
- PAC(流產(chǎn)后關(guān)愛)項(xiàng)目之流產(chǎn)與避孕培訓(xùn)課件
- 山西煤炭運(yùn)銷集團(tuán)三元石窟煤業(yè)有限公司礦山礦產(chǎn)資源開發(fā)利用、地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 團(tuán)隊(duì)項(xiàng)目任務(wù)完成進(jìn)度跟進(jìn)表模板
- 山東省應(yīng)急管理普法知識競賽參考題庫-中(多選題)
- 聶耳音樂課件人物介紹
- 2023年教師基本功市級考核初中物理試卷
- PPAP項(xiàng)目計(jì)劃表模板
評論
0/150
提交評論