C-函數(shù)省公開(kāi)課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第1頁(yè)
C-函數(shù)省公開(kāi)課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第2頁(yè)
C-函數(shù)省公開(kāi)課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第3頁(yè)
C-函數(shù)省公開(kāi)課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第4頁(yè)
C-函數(shù)省公開(kāi)課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章過(guò)程抽象--函數(shù)第1頁(yè)本章內(nèi)容子程序函數(shù)帶缺省值形式參數(shù)變量局部性遞歸函數(shù)函數(shù)名重載內(nèi)聯(lián)函數(shù)條件編譯第2頁(yè)子程序子程序是命了名一段程序代碼,它通常完成一個(gè)獨(dú)立(子)功效。子程序除了能夠起到節(jié)約程序代碼量作用外,它還有一個(gè)非常主要作用:過(guò)程抽象,即,一個(gè)子程序代表一個(gè)功效。在程序其它地方經(jīng)過(guò)子程序名字來(lái)使用(調(diào)用)子程序,而無(wú)須關(guān)心它們是怎樣實(shí)現(xiàn)。第3頁(yè)函數(shù)函數(shù)是C++提供用于實(shí)現(xiàn)子程序語(yǔ)言成份。函數(shù)定義:<返回值類(lèi)型><函數(shù)名>(<形式參數(shù)表>)<函數(shù)體>形參說(shuō)明格式為:<類(lèi)型><形參名><函數(shù)體>為一個(gè)<復(fù)合語(yǔ)句>,用于實(shí)現(xiàn)對(duì)應(yīng)函數(shù)功效。函數(shù)體內(nèi)能夠包含return語(yǔ)句,當(dāng)函數(shù)體執(zhí)行到return語(yǔ)句時(shí),函數(shù)馬上返回到調(diào)用者。return語(yǔ)句格式:return<表示式>;return;注意:在函數(shù)體中不能用goto語(yǔ)句轉(zhuǎn)出函數(shù)體。第4頁(yè)函數(shù)例子intfactorial(intn)//求n階乘{(lán) inti,f=1; for(i=2;i<=n;i++)f*=i; returnf;}第5頁(yè)voidHi(){cout<<“Hi”<<endl;return;//可省略}第6頁(yè)例1關(guān)于C++函數(shù),以下表述正確是A每個(gè)函數(shù)都有一個(gè)函數(shù)名B每個(gè)函數(shù)都有一個(gè)返回值C每個(gè)函數(shù)都有一個(gè)或多個(gè)參數(shù)D每個(gè)函數(shù)都用return語(yǔ)句結(jié)束運(yùn)行第7頁(yè)函數(shù)調(diào)用

對(duì)于定義一個(gè)函數(shù),必須要調(diào)用它,它函數(shù)體才會(huì)執(zhí)行。函數(shù)調(diào)用格式以下:<函數(shù)名>(<實(shí)在參數(shù)表>)<實(shí)在參數(shù)表>由零個(gè)、一個(gè)或多個(gè)表示式組成(逗號(hào)分割),其個(gè)數(shù)和類(lèi)型應(yīng)與對(duì)應(yīng)函數(shù)形參相同。注意:不能用goto語(yǔ)句從函數(shù)外轉(zhuǎn)入函數(shù)體第8頁(yè)函數(shù)調(diào)用例子......intmain(){ intx; cout<<"請(qǐng)輸入一個(gè)正整數(shù):"; cin>>x; cout<<"Factorialof"<<x<<"is" <<factorial(x)//調(diào)用階乘函數(shù) <<endl; return0;}第9頁(yè)函數(shù)調(diào)用執(zhí)行過(guò)程計(jì)算實(shí)參值(對(duì)于多個(gè)實(shí)參,C++沒(méi)有要求計(jì)算次序);把實(shí)參分別傳遞給被調(diào)用函數(shù)形參;執(zhí)行函數(shù)體;函數(shù)體中執(zhí)行return語(yǔ)句返回函數(shù)調(diào)用點(diǎn),調(diào)用點(diǎn)取得返回值(假如有返回值)并執(zhí)行調(diào)用之后操作。第10頁(yè)函數(shù)申明程序中調(diào)用全部函數(shù)都要有定義。假如函數(shù)定義在其它文件(如:C++標(biāo)準(zhǔn)庫(kù))中或定義在根源文件中使用點(diǎn)之后,則在調(diào)用前需要對(duì)被調(diào)用函數(shù)進(jìn)行申明。函數(shù)申明格式以下:<返回值類(lèi)型><函數(shù)名>(<形式參數(shù)表>);//函數(shù)原型extern<返回值類(lèi)型><函數(shù)名>(<形式參數(shù)表>);在函數(shù)申明中,<形式參數(shù)表>中能夠只列出形參類(lèi)型而不寫(xiě)形參名。第11頁(yè)例2關(guān)于函數(shù)調(diào)用,以下表述正確是A調(diào)用函數(shù)時(shí)必須給出實(shí)參B必須在表示式中調(diào)用函數(shù)C函數(shù)必須先有定義才能調(diào)用D函數(shù)不能自己調(diào)用自己第12頁(yè)例:用函數(shù)實(shí)現(xiàn)求小于n全部素?cái)?shù)。#include<iostream>usingnamespacestd;boolis_prime(intn);//函數(shù)申明voidprint_prime(intn,intcount);//函數(shù)申明intmain(){ inti,n,count=1; cout<<"請(qǐng)輸入一個(gè)正整數(shù):" cin>>n;//從鍵盤(pán)輸入一個(gè)正整數(shù) if(n<2)return-1; cout<<2<<",";//輸出第一個(gè)素?cái)?shù) for(i=3;i<n;i+=2) { if(is_prime(i)) { count++; print_prime(i,count); } }第13頁(yè) cout<<endl; return0;}boolis_prime(intn){ inti,j; for(i=2,j=n;i<=j;i++) if(n%i==0)returnfalse; returntrue;}voidprint_prime(intn,intcount){ cout<<n<<','; if(count%6==0)cout<<endl;}第14頁(yè)函數(shù)參數(shù)傳遞C++提供了兩種參數(shù)傳遞機(jī)制:值傳遞和引用傳遞。C++默認(rèn)參數(shù)傳遞方式是值傳遞。值傳遞是指在函數(shù)調(diào)用時(shí),采取類(lèi)似賦值操作形式把實(shí)參傳給形參。函數(shù)執(zhí)行過(guò)程中,經(jīng)過(guò)形參取得實(shí)參值,函數(shù)體中對(duì)形參值改變不會(huì)影響對(duì)應(yīng)實(shí)參值。假如有多個(gè)實(shí)參要傳給函數(shù),而每個(gè)實(shí)參都是表示式,這時(shí),C++并沒(méi)有要求這些實(shí)參表示式計(jì)算次序,實(shí)際計(jì)算次序由詳細(xì)編譯程序來(lái)決定。第15頁(yè)值參數(shù)傳遞例子#include<iostream>usingnamespacestd;doubleplus3(doublen);intmain(){ doublem=3.0; cout<<m<<plus3(m)<<m<<endl; return0;}第16頁(yè)doubleplus3(doublen){ n+=3;returnn;}第17頁(yè)執(zhí)行main時(shí),產(chǎn)生一個(gè)變量n: m:3.0調(diào)用power函數(shù)時(shí),又產(chǎn)生一個(gè)變量m,然后用n對(duì)它初始化: m:3.0n:3.0函數(shù)plus3中賦值操作結(jié)束后(函數(shù)返回前): m:3.0n:6.0函數(shù)power返回后: m:3.0n:6.0第18頁(yè)參數(shù)默認(rèn)值在C++中允許在定義或申明函數(shù)時(shí),為函數(shù)一些參數(shù)指定默認(rèn)值。假如調(diào)用這些函數(shù)時(shí)沒(méi)有提供對(duì)應(yīng)實(shí)參,則對(duì)應(yīng)形參采取指定默認(rèn)值,不然對(duì)應(yīng)形參采取調(diào)用者提供實(shí)參值。比如,對(duì)于下面函數(shù)申明:voidprint(intvalue,intbase=10);下面調(diào)用:print(28,10);//28傳給value;10傳給baseprint(32,2);//32傳給value;2傳給base第19頁(yè)在指定函數(shù)參數(shù)默認(rèn)值時(shí),應(yīng)注意下面幾點(diǎn):有默認(rèn)值形參應(yīng)處于形參表右部。比如:voidf(inta,intb=1,intc=0);//OKvoidf(inta,intb=1,intc);//Error

對(duì)參數(shù)默認(rèn)值指定只在函數(shù)申明處有意義。在不一樣源文件中,對(duì)同一個(gè)函數(shù)申明能夠?qū)λ粋€(gè)參數(shù)指定不一樣默認(rèn)值;在同一個(gè)源文件中,對(duì)同一個(gè)函數(shù)申明只能對(duì)它每一個(gè)參數(shù)指定一次默認(rèn)值。

第20頁(yè)若函數(shù)原型說(shuō)明為:intf(chara,char*b=NULL,doublec=0.0);則以下調(diào)用函數(shù)f選項(xiàng)中,語(yǔ)法錯(cuò)誤是f(99)f(‘A’,4.5)f(‘A’,”123”)f((char)65,“123”)第21頁(yè)變量局部性在C++中,依據(jù)變量定義位置,把變量分成:全局變量和局部變量。全局變量是指定義在函數(shù)外部變量,它們普通能被程序中全部函數(shù)使用(靜態(tài)全局變量除外)。局部變量是指在復(fù)合語(yǔ)句中定義變量,它們只能在定義它們復(fù)合語(yǔ)句(包含內(nèi)層復(fù)合語(yǔ)句)中使用。第22頁(yè)全局變量和局部變量例子intx=0;//全局變量voidf(){ inty=0;//局部變量 x++;//OK y++;//OK}voidg(){ x++;//OK y++;//Error}intmain(){ f();g(); x++;//OK y++;//Error return0;}第23頁(yè)例3關(guān)于變量表述,錯(cuò)誤是A在一個(gè)函數(shù)中能夠訪問(wèn)定義在函數(shù)外變量B在一個(gè)函數(shù)中能夠訪問(wèn)定義在另一個(gè)函數(shù)中變量C在一個(gè)函數(shù)中能夠訪問(wèn)定義在另一個(gè)程序文件中變量D在一個(gè)函數(shù)中能夠訪問(wèn)定義在同一函數(shù)中變量第24頁(yè)問(wèn)題函數(shù)能夠訪問(wèn)其它程序文件中變量前提:在定義變量文件中,該變量定義在函數(shù)外,而且沒(méi)有加static修飾;在訪問(wèn)該變量文件中有對(duì)應(yīng)extern申明第25頁(yè)變量生存期(存放分配)把程序運(yùn)行時(shí)一個(gè)變量占有內(nèi)存空間時(shí)間段稱(chēng)為該變量生存期。C++把變量生存期分為:靜態(tài):內(nèi)存空間從程序開(kāi)始執(zhí)行時(shí)就進(jìn)行分配,直到程序結(jié)束才收回它們空間。全局變量含有靜態(tài)生存期。自動(dòng):內(nèi)存空間在程序執(zhí)行到定義它們復(fù)合語(yǔ)句(包含函數(shù)體)時(shí)才分配,當(dāng)定義它們復(fù)合語(yǔ)句執(zhí)行結(jié)束時(shí),它們空間將被收回。局部變量和函數(shù)參數(shù)普通含有自動(dòng)生存期。動(dòng)態(tài):內(nèi)存空間用new操作分配、用delete操作收回。動(dòng)態(tài)變量含有動(dòng)態(tài)生存期。

第26頁(yè)存放類(lèi)修飾符在定義局部變量時(shí),能夠?yàn)樗鼈兗由洗娣蓬?lèi)修飾符來(lái)指出它們生存期。auto:局部變量含有自動(dòng)生存期。局部變量默認(rèn)存放類(lèi)為auto。static:局部變量含有靜態(tài)生存期,只在函數(shù)第一次調(diào)用時(shí)進(jìn)行初始化,以后調(diào)用中不再進(jìn)行初始化,它值為上一次函數(shù)調(diào)用結(jié)束時(shí)值。register:局部變量含有自動(dòng)生存期,由編譯程序依據(jù)CPU存放器使用情況來(lái)決定是否存放在存放器中。第27頁(yè)voidf(){intx=0;staticinty=1;registerintz=0;x++;y++;z++;cout<<x<<y<<z<<endl;}第一次調(diào)用f時(shí),輸出:第二次調(diào)用f時(shí),輸出:121131第28頁(yè)C++程序多模塊結(jié)構(gòu)一個(gè)C++程序由一些全局函數(shù)(區(qū)分于類(lèi)定義中組員函數(shù))、全局常量、全局變量/對(duì)象以及類(lèi)定義組成,其中必須有且僅有一個(gè)名字為main全局函數(shù)。函數(shù)內(nèi)部能夠包含形參、局部常量、局部變量/對(duì)象定義以及語(yǔ)句。模塊是一個(gè)可單獨(dú)編譯程序單位,它用來(lái)對(duì)程序邏輯單位進(jìn)行分組。一個(gè)模塊普通由包含兩個(gè)部分:接口(.h文件):給出在本模塊中定義、提供給其它模塊使用一些程序?qū)嶓w(如:函數(shù)、全局變量等)申明;實(shí)現(xiàn)(.cpp文件):模塊實(shí)現(xiàn)給出了模塊中程序?qū)嶓w定義。第29頁(yè)//file1.hexternintx;//全局變量x申明externdoubley;//全局變量y申明intf();//全局函數(shù)f申明//file1.cppintx=1;//全局變量x定義doubley=2.0;//全局變量y定義intf()//全局函數(shù)f定義{ intm;//局部變量m定義 ...... m+=x;//語(yǔ)句 ...... returnm;}第30頁(yè)//file2.hvoidg();//全局函數(shù)g申明//file2.cpp#include"file1.h"http://把文件file1.h中內(nèi)容包含進(jìn)來(lái)voidg()//全局函數(shù)g定義{ doublez;//局部變量z定義 ...... z=y+10;//語(yǔ)句 ......}第31頁(yè)//main.cpp#include"file1.h"http://把文件file1.h中內(nèi)容包含進(jìn)來(lái)#include"file2.h"http://把文件file2.h中內(nèi)容包含進(jìn)來(lái)intmain()//全局函數(shù)main定義{ doubler;//局部變量r定義 ...... r=x+y*f();//語(yǔ)句 ...... g();//語(yǔ)句 ......}第32頁(yè)標(biāo)識(shí)符作用域一個(gè)定義了標(biāo)識(shí)符有效范圍(能被訪問(wèn)程序段)稱(chēng)為該標(biāo)識(shí)符作用域。C++把標(biāo)識(shí)符作用域分成若干類(lèi),其中包含:局部作用域全局作用域文件作用域函數(shù)作用域函數(shù)原型作用域類(lèi)作用域名空間作用域第33頁(yè)局部作用域在函數(shù)定義或復(fù)合語(yǔ)句中、從標(biāo)識(shí)符定義點(diǎn)開(kāi)始到函數(shù)定義或復(fù)合語(yǔ)句結(jié)束之間程序段。C++中局部常量名、局部變量名/對(duì)象名以及函數(shù)形參名含有局部作用域。假如在一個(gè)標(biāo)識(shí)符局部作用域中包含內(nèi)層復(fù)合語(yǔ)句,而且在該內(nèi)層復(fù)合語(yǔ)句中定義了一個(gè)同名不一樣實(shí)體,則外層定義標(biāo)識(shí)符作用域應(yīng)該是從其潛在作用域中扣除內(nèi)層同名標(biāo)識(shí)符作用域之后所得到作用域。第34頁(yè)voidf(){ ...x...//Error intx;//外層x定義 ...x...//外層x while(...x...)//外層x { ...x...//外層x doublex;//內(nèi)層x定義 ...x...//內(nèi)層x } ...x...//外層x}第35頁(yè)全局作用域全局變量名/對(duì)象名、全局函數(shù)名和全局類(lèi)名作用域普通含有全局作用域,它們?cè)谡麄€(gè)程序中可用。假如在某個(gè)局部作用域中定義了與某個(gè)全局標(biāo)識(shí)符同名標(biāo)識(shí)符,則該全局標(biāo)識(shí)符作用域應(yīng)扣掉與之同名局部標(biāo)識(shí)符作用域。在局部標(biāo)識(shí)符作用域中若要使用與其同名全局標(biāo)識(shí)符,則需要用全局域選擇符(::)對(duì)全局標(biāo)識(shí)符進(jìn)行修飾(受限)。把全局標(biāo)識(shí)符申明放在某個(gè).h文件中,在需要使用這些全局標(biāo)識(shí)符源文件中用#include編譯預(yù)處理命令把申明文件包含進(jìn)來(lái)。

第36頁(yè)doublex;//外層x定義voidf(){ intx;//內(nèi)層x定義 ...x...//內(nèi)層x ...::x...//外層x}第37頁(yè)文件作用域在全局標(biāo)識(shí)符定義中加上static修飾符,則該全局標(biāo)識(shí)符就成了含有文件作用域標(biāo)識(shí)符,它們只能在定義它們?cè)次募惺褂?。C++中關(guān)鍵詞static有兩個(gè)不一樣含義。在局部變量定義中,static修飾符用于指定局部變量采取靜態(tài)存放分配;而在全局標(biāo)識(shí)符定義中,static修飾符用于把全局標(biāo)識(shí)符作用域改變?yōu)槲募饔糜颉?/p>

普通情況下,含有全局作用域標(biāo)識(shí)符主要用于標(biāo)識(shí)被程序各個(gè)模塊共享程序?qū)嶓w,而含有文件作用域標(biāo)識(shí)符用于標(biāo)識(shí)在一個(gè)模塊內(nèi)部共享程序?qū)嶓w。第38頁(yè)//file1.cppstaticinty;//文件作用域staticvoidf()//文件作用域{......}//file2.cppexterninty;externvoidf();voidg(){...y...//Errorf();//Error}第39頁(yè)函數(shù)作用域語(yǔ)句標(biāo)號(hào)是唯一含有函數(shù)作用域標(biāo)識(shí)符,它們?cè)诙x它們函數(shù)體中任何地方都能夠訪問(wèn)。函數(shù)作用域與局部作用域區(qū)分是:函數(shù)作用域包含整個(gè)函數(shù),而局部作用域是從定義點(diǎn)開(kāi)始到函數(shù)定義或復(fù)合語(yǔ)句結(jié)束。在函數(shù)體中,一個(gè)語(yǔ)句標(biāo)號(hào)只能定義一次,即使是在內(nèi)層復(fù)合語(yǔ)句中,也不能再定義與外層相同語(yǔ)句標(biāo)號(hào)。第40頁(yè)voidf(){ ...... gotoL;//OK ...... L:... ...... gotoL;//OK ......}voidg(){ ...... gotoL;//Error ......}第41頁(yè)名空間作用域?qū)τ谝粋€(gè)多文件組成程序,有時(shí)見(jiàn)面臨一個(gè)問(wèn)題:在一個(gè)源文件中要用到兩個(gè)分別在另外兩個(gè)源文件中定義不一樣全局程序?qū)嶓w(如:全局函數(shù)),而這兩個(gè)全局程序?qū)嶓w名字相同。C++提供了名空間(namespace)設(shè)施來(lái)處理上述名沖突問(wèn)題。在一個(gè)名空間中定義全局標(biāo)識(shí)符,其作用域?yàn)樵撁臻g。當(dāng)在一個(gè)名空間外部需要使用該名空間中定義全局標(biāo)識(shí)符時(shí),可用該名空間名字來(lái)修飾或受限。第42頁(yè)namespaceA{ intx=1; voidf() {...... }}namespaceB{ intx=0; voidf() {...... }}...A::x...//A中xA::f();//A中f...B::x...//B中xB::f();//B中fusingnamespaceA;...x...//A中xf();//A中f...B::x...//B中xB::f();//B中fusingA::f;...A::x...//A中x

f();//A中f...B::x...//B中xB::f();//B中f第43頁(yè)遞歸函數(shù)函數(shù)調(diào)用是能夠嵌套。假如一個(gè)函數(shù)在其函數(shù)體中直接或間接地調(diào)用了自己,則該函數(shù)稱(chēng)為遞歸函數(shù)。

第44頁(yè)直接遞歸voidf(){..........f()..........}間接遞歸externvoidg();voidf(){..........g()..........}voidg(){.........f().........}第45頁(yè)遞歸函數(shù)作用在程序設(shè)計(jì)中經(jīng)常需要實(shí)現(xiàn)重復(fù)性操作。循環(huán)為實(shí)現(xiàn)重復(fù)操作提供了一個(gè)路徑。實(shí)現(xiàn)重復(fù)操作另一個(gè)路徑是采取遞歸函數(shù)?!胺侄沃保―ivideandConquer)設(shè)計(jì)方法:把一個(gè)問(wèn)題分解成若干個(gè)子問(wèn)題,而每個(gè)子問(wèn)題性質(zhì)與原問(wèn)題相同,只是在規(guī)模上比原問(wèn)題要小。每個(gè)子問(wèn)題求解過(guò)程能夠采取與原問(wèn)題相同方式來(lái)進(jìn)行。遞歸函數(shù)為上述設(shè)計(jì)方法提供了一個(gè)自然、簡(jiǎn)練實(shí)現(xiàn)機(jī)制第46頁(yè)遞歸函數(shù)執(zhí)行過(guò)程//用遞歸函數(shù)求n!

intf(intn){ if(n==0) return1; else returnn*f(n-1);}第47頁(yè)遞歸條件和結(jié)束條件在定義遞歸函數(shù)時(shí),一定要對(duì)兩種情況給出描述:遞歸條件。指出何時(shí)進(jìn)行遞歸調(diào)用,它描述了問(wèn)題求解普通情況,包含:分解和綜合過(guò)程。結(jié)束條件。指出何時(shí)不需遞歸調(diào)用,它描述了問(wèn)題求解特殊情況或基本情況第48頁(yè)遞歸與循環(huán)選擇對(duì)于一些遞歸定義問(wèn)題,用遞歸函數(shù)來(lái)處理會(huì)顯得比較自然和簡(jiǎn)練,而用循環(huán)來(lái)處理這么問(wèn)題,有時(shí)會(huì)很復(fù)雜,不易設(shè)計(jì)和了解。在實(shí)現(xiàn)數(shù)據(jù)操作上,它們有一點(diǎn)不一樣:循環(huán)是在同一組變量上進(jìn)行重復(fù)操作(循環(huán)經(jīng)常又稱(chēng)為迭代)遞歸則是在不一樣變量組(屬于遞歸函數(shù)不一樣實(shí)例)上進(jìn)行重復(fù)操作。遞歸表示重復(fù)操作是經(jīng)過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn),而函數(shù)調(diào)用是需要開(kāi)銷(xiāo)第49頁(yè)函數(shù)名重載對(duì)于一些功效相同、參數(shù)類(lèi)型或個(gè)數(shù)不一樣函數(shù),有時(shí)給它們?nèi)∠嗤謺?huì)帶來(lái)使用上方便。比如,把下面函數(shù):voidprint_int(inti){......}voidprint_double(doubled){......}voidprint_char(charc){......}voidprint_A(Aa){......}//A為自定義類(lèi)型定義為:voidprint(inti){......}voidprint(doubled){......}voidprint(charc){......}voidprint(Aa){......}上述函數(shù)定義形式稱(chēng)為函數(shù)名重載。第50頁(yè)例假如已經(jīng)有以下函數(shù)定義,intf(intk,intm=0,doubled=0.0)能否重載以下函數(shù)?intf(int,int);f(3,0)不能重載,要看調(diào)用時(shí)實(shí)際效果。調(diào)用時(shí)無(wú)法區(qū)分這兩個(gè)函數(shù)。第51頁(yè)應(yīng)該從調(diào)用角度去了解:重載函數(shù)必須在參數(shù)個(gè)數(shù)與類(lèi)型上不一樣而不應(yīng)該從定義角度了解所以,應(yīng)該在去掉全部默認(rèn)參數(shù)前提下,在參數(shù)個(gè)數(shù)與類(lèi)型上不一樣第52頁(yè)對(duì)重載函數(shù)調(diào)用綁定確定一個(gè)對(duì)重載函數(shù)調(diào)用對(duì)應(yīng)著哪一個(gè)重載函數(shù)定義過(guò)程稱(chēng)為綁定(binding,又稱(chēng)定聯(lián)、聯(lián)編、捆綁)。在編譯時(shí)刻由編譯程序依據(jù)實(shí)參加形參匹配情況來(lái)決定。從形參個(gè)數(shù)與實(shí)參個(gè)數(shù)相同重載函數(shù)中按下面規(guī)則選擇一個(gè):p106準(zhǔn)確匹配提升匹配標(biāo)準(zhǔn)轉(zhuǎn)換匹配自定義轉(zhuǎn)換匹配匹配失敗第53頁(yè)處理小函數(shù)低效問(wèn)題因?yàn)楹瘮?shù)調(diào)用是需要開(kāi)銷(xiāo),尤其是對(duì)一些小函數(shù)頻繁調(diào)用將使程序效率有很大降低。C++提供了兩種處理上述問(wèn)題方法:宏定義內(nèi)聯(lián)函數(shù)第54頁(yè)宏定義宏定義用#define來(lái)實(shí)現(xiàn),它是C++一個(gè)編譯預(yù)處理命令。在C++中,宏定義有4種格式:#define凵<宏名>凵<文字串>#define凵<宏名>(<參數(shù)表>)凵<文字串>#define凵<宏名>#undef凵<宏名>上面格式2宏定義能夠?qū)崿F(xiàn)類(lèi)似函數(shù)功效,比如:#define凵max(a,b)凵(((a)>(b))?(a):(b))cout<<max(x,y);第55頁(yè)宏定義只是進(jìn)行簡(jiǎn)單文字替換#defineT(x,y)x*y/4(05秋)則表示式T(3+4,4+4)值為?3+4*4+4/4=20第56頁(yè)宏定義不足處有時(shí)會(huì)出現(xiàn)重復(fù)計(jì)算。比如:max(x+1,y*2)將被替換成:(((x+1)>(y*2))?(x+1):(y*2))不進(jìn)行參數(shù)類(lèi)型檢驗(yàn)和轉(zhuǎn)換。

不利于一些工具對(duì)程序處理。

第57頁(yè)內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)是指在函數(shù)定義中,能夠在函數(shù)返回類(lèi)型之前加上一個(gè)關(guān)鍵詞inline,比如:inlineintmax(inta,intb){ returna>b?a:b;}內(nèi)聯(lián)函數(shù)作用是提議編譯程序把該函數(shù)函數(shù)體展開(kāi)到調(diào)用點(diǎn)。內(nèi)聯(lián)函數(shù)形式上屬于函數(shù),它遵照函數(shù)一些要求,如:參數(shù)類(lèi)型檢驗(yàn)與轉(zhuǎn)換。使用內(nèi)聯(lián)函數(shù)時(shí)應(yīng)注意以下幾點(diǎn):編譯程序?qū)?nèi)聯(lián)函數(shù)限制。內(nèi)聯(lián)函數(shù)名含有文件作用域。第58頁(yè)編譯預(yù)處理命令C++程序中能夠?qū)懸恍┕┚幾g程序使用命令:編譯預(yù)處理命令,這些命令不是C++程序所要完成功效,而是用于對(duì)編譯過(guò)程給出指導(dǎo),其功效由編譯預(yù)處理系統(tǒng)來(lái)完成。主要有:文件包含命

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論