2程序有一個主函數(shù)_第1頁
2程序有一個主函數(shù)_第2頁
2程序有一個主函數(shù)_第3頁
2程序有一個主函數(shù)_第4頁
2程序有一個主函數(shù)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章函數(shù) 函數(shù)一個C+程序有一個主函數(shù), 主函數(shù)是程序執(zhí)行的開始點。C+ 不允許函數(shù)定義嵌套。函數(shù)有兩種:標(biāo)準(zhǔn)庫函數(shù)和用戶自定義函數(shù)內(nèi)聯(lián)函數(shù) 內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)也稱內(nèi)嵌或內(nèi)置函數(shù),它的語法格式與普通函數(shù)一樣,只是在函數(shù)原型或函數(shù)定義標(biāo)題頭之前加上關(guān)鍵字inline。inline int isnumber(char);inline int isnumber(char ch) return(ch=0 &ch=9)?1:0;編譯器為內(nèi)聯(lián)函數(shù)創(chuàng)建一段源代碼,每遇到一次該函數(shù)的調(diào)用都用相應(yīng)的一段代碼來代替。內(nèi)聯(lián)函數(shù)應(yīng)是使用頻率高,代碼卻很短的函數(shù)內(nèi)聯(lián)函數(shù)#include using namespace

2、std;inline int isnumber(char); / int isnumber(char);(則正常函數(shù)調(diào)用)int main() char c; while (cinc & c!=n) if (isnumber( c ) coutyou entered a digitn; else cout=0 &ch=9)?1:0; 內(nèi)聯(lián)函數(shù)的限制內(nèi)聯(lián)函數(shù)中,不能含有開關(guān)例如switch和循環(huán)語句,例如while。 遞歸函數(shù)是不能被用來做內(nèi)聯(lián)函數(shù)的。內(nèi)聯(lián)函數(shù)中不能說明數(shù)組內(nèi)聯(lián)函數(shù)是建議性,不是指令性內(nèi)聯(lián)函數(shù)只適合于1-5行的小函數(shù)類結(jié)構(gòu)中所有在類內(nèi)部定義的函數(shù),都是內(nèi)聯(lián)函數(shù)。虛函數(shù)不能是內(nèi)聯(lián)函

3、數(shù)重載函數(shù) 重載函數(shù) C:void print_int(int);void print_char(char);void print_double(double); C+支持重載函數(shù):出現(xiàn)在同一個作用域的兩個函數(shù),如果具有相同的名字而形參表不同,則稱為重載函數(shù)。void print (int); void print (char); void print (double); C+編譯器根據(jù)傳遞的實參類型來判斷調(diào)用哪個函數(shù)。 print (-10);/調(diào)用print (int); print (a);/調(diào)用print (char); print (12.3);/調(diào)用print (double);

4、重載函數(shù) void print (double); void print (long); void print(double,char*); void print(char*,double); void fun( ) print (1L);/print(long) print (1.0);/print(double) print (2.0,”hello”);/print(double,char*) print (”hello”,3.0);/print(char*,double)重載函數(shù)匹配結(jié)果1.編譯器找到與實參最佳匹配的函數(shù)2.找不到形參與函數(shù)調(diào)用的實參匹配的函數(shù),編譯器給出編譯錯誤3.存在

5、多個與實參匹配的函數(shù),但沒有一個是明顯的最佳選擇。該調(diào)用具有“二義性”,也是錯誤的匹配重載函數(shù)void print(int);void print(double);void function() print(3); print(5.0); print(a); print(3.1415f);void print(long);void print(double);void function() int a; print(a);/有二義性print(long(a);或者print(double(a);(1)嚴(yán)格匹配(2)內(nèi)部轉(zhuǎn)換(相容類型匹配)(3)通過用戶定義的轉(zhuǎn)換尋找求一個匹配重載的內(nèi)部實現(xiàn)C+

6、用名字粉碎(name mangling)(名字細(xì)分、名字壓軋)的方法來改變函數(shù)名。用v,c,i,f,l,d,r 分別表示void,char,int,float,long,double,longdouble. int f (char a); / f_c int f (char a,int b,double c); /f_cid注意點返回值類型不能夠作為重載依據(jù)(區(qū)分、細(xì)分重載)void func (int);int func ( int);fucn(10); /error課堂練習(xí)int show(int);float show(float);float show(float);int show(

7、int a)coutint:aendl;return a;float show(float b)cout float:bendl;return b;double show(double c)cout double:cendl;return c;int _tmain(int argc, _TCHAR* argv)show(12);show(0.12);show(0.00000032);return 0;默認(rèn)參數(shù)的函數(shù) 默認(rèn)參數(shù)的函數(shù)void delay(int loops);void delay(int loops) if (loops=0)return; for (int i=0;iloops

8、;i+);將loops 定義成默認(rèn)值為1000調(diào)用時:delay();delay(2000);默認(rèn)參數(shù)也稱為缺省參量,也就是在函數(shù)聲明的時候已給定一個值,如果調(diào)用函數(shù)時沒有指定這個參數(shù)的值,編譯器就會自動地插上這個值。默認(rèn)參數(shù)函數(shù)的聲明當(dāng)又有聲明又有定義時,定義中不允許默認(rèn)參數(shù)。若只有定義,則默認(rèn)參數(shù)才可出現(xiàn)在函數(shù)定義中默認(rèn)參數(shù)的順序規(guī)定定義時:不可以在一個默認(rèn)參數(shù)后面又跟一個非默認(rèn)參數(shù);調(diào)用時:一旦在一個函數(shù)調(diào)用中開始使用默認(rèn)參數(shù),那么這個參數(shù)后面的所有參數(shù)都必須是默認(rèn)的例:void foo(int a, int b=50, int c=0);void foo(int a, int b, b

9、ool c = false);void foo(int a, int b = 0, bool c);默認(rèn)參數(shù)函數(shù)的例子#include using namespace std; void fun(int a,int b=3,int c=5) couta=a, b=b,c=c,endl; int main() fun(7); fun(7,9); fun(7,9,11); fun(); coutOK; return 0; 默認(rèn)值的規(guī)定默認(rèn)值可以是全局變量、全局常量、函數(shù)。不可以是局部變量。因為默認(rèn)值是在編譯時確定的,必須是靜態(tài)確定的。函數(shù)重載與函數(shù)默認(rèn)例1: void func(int,int);

10、void func(int=3,int=4);func(22,32);例2:void func(int); void func(int,int);例3:void func(int);void func(int,int=4);應(yīng)該避免重載過程中的涉及參數(shù)個數(shù)的默認(rèn)設(shè)置函數(shù)重載與函數(shù)默認(rèn)int month,int day,int year;void Tdate() month=4; day=15; year=1995;void Tdate(int m) month=m; day=15; year=1995;void Tdate(int m,int d) month=m; day=d; year=1995;void Tdate(int m,int d,int y) month=m; day=d; year=y;int main() Tdate(); Tdate(1); Tdate(1,2); Tdate(1,2,3); return 0;默認(rèn)函數(shù):void Tdate(int m=4,int d=15

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論