




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第03章函數(shù)-2-本章內(nèi)容安排函數(shù)的概念函數(shù)的聲明與定義函數(shù)中的變量函數(shù)返回值默認(rèn)參數(shù)函數(shù)重載內(nèi)聯(lián)函數(shù)-3-什么是函數(shù)函數(shù)是C++程序的基本構(gòu)成單元,函數(shù)對(duì)數(shù)據(jù)執(zhí)行操作并返回處理結(jié)果。-4-什么是函數(shù)?每個(gè)程序中有且僅有1個(gè)main函數(shù),其它函數(shù)可根據(jù)需要定義。程序運(yùn)行時(shí),系統(tǒng)會(huì)調(diào)用main函數(shù),main函數(shù)執(zhí)行結(jié)束后整個(gè)程序結(jié)束。main函數(shù)可調(diào)用其它函數(shù),函數(shù)之間可以相互調(diào)用。每個(gè)函數(shù)都有名稱,可用于調(diào)用它。函數(shù)被調(diào)用后,執(zhí)行其中的語(yǔ)句,語(yǔ)句執(zhí)行完或遇到return后返回到調(diào)用該函數(shù)的地方繼續(xù)執(zhí)行。-6-函數(shù)的聲明函數(shù)在使用前必須被聲明。函數(shù)的聲明將函數(shù)的名稱、返回的數(shù)據(jù)類型、函數(shù)參數(shù)類型告知編譯器。intfindArea(intlength,intwidth);函數(shù)的返回類型:int函數(shù)名稱:findArea函數(shù)的參數(shù)列表:類型為int的2個(gè)參數(shù)length和width函數(shù)的聲明是1條語(yǔ)句,要以分號(hào)結(jié)尾。聲明也叫原型,不
包含任何代碼。函數(shù)可返回任意C++數(shù)據(jù)類型。如果函數(shù)不返回值,將返回
類型寫為void,而不是空缺。函數(shù)名稱、參數(shù)及其排列順序構(gòu)成了函數(shù)的簽名,函數(shù)簽名
唯一地標(biāo)識(shí)了一個(gè)特定的函數(shù)。-7-函數(shù)的定義函數(shù)的定義給出函數(shù)的具體行為,函數(shù)定義包括函數(shù)頭和函數(shù)體,函數(shù)體由若干語(yǔ)句構(gòu)成,放在{}內(nèi)。intfindArea(intl,intw){ intarea=l*w; returnarea;}函數(shù)頭與函數(shù)原型類似,但結(jié)尾不能加分號(hào)。如果函數(shù)返回一個(gè)值,函數(shù)體內(nèi)至少包含1條return語(yǔ)句,return語(yǔ)句可返回類型匹配的常量、變量、表達(dá)式結(jié)果。聲明和定義的匹配函數(shù)的聲明和函數(shù)的定義需要匹配,否則無(wú)法通過(guò)編譯。匹配時(shí)檢查返回值類型、函數(shù)名稱、參數(shù)類型及順序,但不用匹配參數(shù)名稱。intfindArea(int,int);-8-函數(shù)聲明可以只給出參數(shù)類型,但語(yǔ)義不夠清晰,聲明和定義處的參數(shù)名稱可以不同,編譯器忽略聲明處的參數(shù)名稱。函數(shù)名應(yīng)符合標(biāo)識(shí)符規(guī)則,還要養(yǎng)成良好的習(xí)慣,名字應(yīng)能
體現(xiàn)函數(shù)的功能和目的,名字中間不能有空格。-9-函數(shù)的調(diào)用#include<iostream>intfindArea(intlength,intwidth);intmain(){ intlength,width; intarea; std::cout<<“Howwideisyouryard?“; std::cin>>width; std::cout<<“Howlongisyouryard?“; std::cin>>length; …}-10-函數(shù)的調(diào)用intmain(){ …
area=findArea(length,width); std::cout<<“Youryardis“<<area; std::cout<<“squarefeet.\n”; return0;}調(diào)用函數(shù)時(shí)傳遞的參數(shù)稱為實(shí)參,函數(shù)體內(nèi)的參數(shù)稱為形參,
形參用于接收傳入的實(shí)參值。如果將函數(shù)定義放在main函數(shù)之前,可以不寫函數(shù)聲明,但
不是一種良好的習(xí)慣。-11-本章內(nèi)容安排函數(shù)的概念函數(shù)的聲明與定義函數(shù)中的變量函數(shù)返回值默認(rèn)參數(shù)函數(shù)重載內(nèi)聯(lián)函數(shù)局部變量函數(shù)體內(nèi)創(chuàng)建的變量稱為局部變量,局部變量只存在于函數(shù)內(nèi)部,調(diào)用函數(shù)時(shí)局部變量被創(chuàng)建,函數(shù)返回后,所有局部變量被銷毀,不能再被訪問(wèn)。函數(shù)的形參(接收并保存實(shí)參值)也是函數(shù)的局部變量。-12--13-局部變量的使用#include<iostream>floatconvert(float);intmain(){ floatfahrenheit,celsius; std::cout<<"EnterthetemperatureinFahrenheit:"; std::cin>>fahrenheit;
celsius=convert(fahrenheit); std::cout<<"TemperatureinCelsius:“ <<celsius<<"\n"; return0;}-14-局部變量的使用floatconvert(floatfahreheit){
floatcelsius; celsius=((fahreheit-32)*5)/9; returncelsius;}盡管實(shí)參變量和形參變量的名字都是fahreheit,它們是不
同的變量,main函數(shù)的中fahreheit將值復(fù)制給convert
函數(shù)中的fahreheit局部變量。變量作用域:變量存在的范圍,塊語(yǔ)句中聲明的變量只能存在于當(dāng)前塊。全局變量C++中允許在函數(shù)外面定義變量,稱為全局變量,全局變量在程序的任何地方都可使用。全局變量的作用域?yàn)槿?,可以在程序的任何函?shù)中被訪問(wèn)。-15--16-局部變量的使用#include<iostream>voidconvert();floatfahrenheit,celsius;intmain(){ std::cout<<"EnterthetemperatureinFahrenheit:"; std::cin>>fahrenheit;
convert(); std::cout<<"TemperatureinCelsius:“ <<celsius<<"\n"; return0;}-17-局部變量的使用voidconvert(){
celsius=((fahreheit-32)*5)/9;}在函數(shù)中直接操作全局變量,不用傳遞參數(shù)或返回值,表面
上方便省事。但在復(fù)雜程序中,全局變量會(huì)導(dǎo)致程序錯(cuò)誤
難以修改(任意一條語(yǔ)句都有可能修改全局變量的值)良好編程習(xí)慣:應(yīng)避免使用全局變量??!函數(shù)參數(shù)函數(shù)通過(guò)參數(shù)(形參)接收信息,函數(shù)可以包含多個(gè)參數(shù),多個(gè)參數(shù)之間用逗號(hào)分割。函數(shù)調(diào)用時(shí),提供值(實(shí)參)可以是常量、變量、表達(dá)式、其它函數(shù)調(diào)用的返回值。函數(shù)的形參屬于函數(shù)的局部變量,函數(shù)返回后局部變量就被銷毀,無(wú)法再訪問(wèn)了。-18-函數(shù)的參數(shù)傳遞#include<iostream>intmain(){ intx=5,y=4; std::cout<<“sum:“<<sum(x,y); return0;}intsum(inta,intb){ returna+b;}54mainsum54xyab-20-不成功的數(shù)據(jù)交換intx=4,y=13;swap(x,y);voidswap(intx,inty){ inttemp=x; x=y; y=temp;}swap函數(shù)的形參x、y,和調(diào)用處
的x、y雖然同名,但屬于不同的
的變量。swap函數(shù)內(nèi)部,對(duì)自己的局部變
量x和y進(jìn)行交換,函數(shù)返回后,
調(diào)用處的x和y沒(méi)有變化。-21-本章內(nèi)容安排函數(shù)的概念函數(shù)的聲明與定義函數(shù)中的變量函數(shù)返回值默認(rèn)參數(shù)函數(shù)重載內(nèi)聯(lián)函數(shù)從函數(shù)返回值函數(shù)可以返回一個(gè)值或不返回值(用void表示)使用return關(guān)鍵詞從函數(shù)返回值,返回的值可以是常量、變量、表達(dá)式、其它函數(shù)調(diào)用的返回值。遇到return語(yǔ)句后,將立即返回到調(diào)用函數(shù)語(yǔ)句處,return之后的所有語(yǔ)句不再執(zhí)行。-22--23-判斷是否閏年?boolisLeapYear(intyear){
if(year%4==0) {
if(year%100==0) {
if(year%400==0) returntrue; else returnfalse; } else returntrue; } else returnfalse;}閏年的兩個(gè)基本條件1)能被4整除,但不不能被100整除2)能被4、100和400同時(shí)整除只要執(zhí)行到4個(gè)return語(yǔ)句中的一個(gè),
函數(shù)立即返回。-24-判斷是否閏年?#include<iostream>boolisLeapYear(intyear);intmain(){ intinput; std::cout<<"Enterayear:"; std::cin>>input;
if(isLeapYear(input)) std::cout<<input<<"isaleapyear.\n"; else std::cout<<input<<"isnotaleapyear.\n"; return0;}-25-本章內(nèi)容安排函數(shù)的概念函數(shù)的聲明與定義函數(shù)中的變量函數(shù)返回值默認(rèn)參數(shù)函數(shù)重載內(nèi)聯(lián)函數(shù)形參和實(shí)參的匹配在原型中將函數(shù)聲明為接收一個(gè)或多個(gè)參數(shù)時(shí),調(diào)用函數(shù)時(shí)必須使用數(shù)據(jù)類型匹配的實(shí)參。
boolisLeapYear(intyear);調(diào)用isLeapYear函數(shù)時(shí),必須提供一個(gè)類型為int的實(shí)參。如果調(diào)用時(shí)傳遞的參數(shù)少了、多了或者類型不匹配,編譯器將報(bào)錯(cuò)。
isLeapYear();//調(diào)用函數(shù)-26-X形參和實(shí)參的類型并不要求嚴(yán)格相同,如實(shí)參為float類型
形參可以為double類型,系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換。只有當(dāng)類型不
兼容時(shí),編譯器才會(huì)報(bào)錯(cuò)。良好編程習(xí)慣:形參和實(shí)參類型保持一致。指定參數(shù)默認(rèn)值如果在函數(shù)聲明中指定了參數(shù)的默認(rèn)值,調(diào)用函數(shù)時(shí)可以不傳遞相應(yīng)的實(shí)參,此時(shí)使用默認(rèn)值作為實(shí)參傳遞給函數(shù)。
boolisLeapYear(intyear=2011);
isLeapYear();//調(diào)用函數(shù)
isLeapYear(2011);
-27-在函數(shù)原型中聲明缺省值,在函數(shù)定義處無(wú)需定義缺省值。默認(rèn)值規(guī)則如果函數(shù)有多個(gè)參數(shù),可以分別為其指定默認(rèn)值。規(guī)則:從某個(gè)參數(shù)開始,右側(cè)的所有參數(shù)都必須指定默認(rèn)值。 longset4Point(intx,inty,intz,intt);
longset4Point(intx,inty,intz=10,intt);
longset4Point(intx,inty,intz=10,intt=300); set4Point(130,35); set4Point(130,35,10,300); -28-X√-29-默認(rèn)值示例#include<iostream>intfindArea(intlength,intwidth=20,intheight=10);intmain(){ intlength=10,width=5,height=2; intarea;
area=findArea(length,width,height); std::cout<<"FirstArea:"<<area<<std::endl;
area=findArea(length,width); std::cout<<"SecondArea:"<<area<<"\n";
area=findArea(length); std::cout<<"ThirdArea:"<<area<<"\n"; return0;}-30-默認(rèn)值示例intfindArea(intlength,intwidth,intheight){ returnlength*width*height;}只在原型中指定默認(rèn)值,函數(shù)定義中不能指定默認(rèn)值。例外
情況,當(dāng)將函數(shù)定義在調(diào)用代碼的上方時(shí),可以省略原型,
此時(shí)需要在函數(shù)定義中(函數(shù)頭)指定默認(rèn)值。良好編程習(xí)慣:為所有函數(shù)提供原型,在原型中指定默認(rèn)值
調(diào)用函數(shù)時(shí),系統(tǒng)用原型中默認(rèn)值作為實(shí)參調(diào)用函數(shù)。-31-本章內(nèi)容安排函數(shù)的概念函數(shù)的聲明與定義函數(shù)中的變量函數(shù)返回值默認(rèn)參數(shù)函數(shù)重載內(nèi)聯(lián)函數(shù)函數(shù)重載的概念C++中允許定義多個(gè)同名的函數(shù),但它們的參數(shù)不同,稱為函數(shù)重載。參數(shù)不同分下面幾種情況:參數(shù)類型不同參數(shù)數(shù)量不同數(shù)量和類型均不同intstore(int,int);intstore(long,long);intstore(long);-32-函數(shù)重載的匹配調(diào)用store函數(shù),編譯器將根據(jù)傳遞的實(shí)參數(shù)據(jù)類型和數(shù)量確定調(diào)用哪個(gè)版本的store。不能通過(guò)函數(shù)返回值類型判斷重載函數(shù)的版本,如果兩個(gè)同名函數(shù)的參數(shù)類型和個(gè)數(shù)一致,而返回值類型不同,編譯器將報(bào)錯(cuò)。
intmyFun(int,int); floatmyFun(int,int);-33-X函數(shù)重載的用途通過(guò)函數(shù)重載,可以創(chuàng)建針對(duì)不同數(shù)據(jù)類
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度景區(qū)景點(diǎn)精細(xì)化保潔服務(wù)協(xié)議
- 二零二五年度二手車轉(zhuǎn)讓及過(guò)戶手續(xù)協(xié)議
- 二零二五年度新型小區(qū)門衛(wèi)管理及應(yīng)急預(yù)案合同
- 2025年度綠色節(jié)能庫(kù)房租賃合同
- 2025年度高新技術(shù)企業(yè)員工勞動(dòng)合同解除終止協(xié)議書
- 2025年度物業(yè)服務(wù)合同主體變更協(xié)議范本
- 二零二五年度大數(shù)據(jù)服務(wù)股權(quán)投資與轉(zhuǎn)讓協(xié)議
- 二零二五年度冷凍庫(kù)租賃及冷鏈物流配送中心建設(shè)合同
- 二零二五年度離婚協(xié)議中財(cái)產(chǎn)分割執(zhí)行監(jiān)督補(bǔ)充協(xié)議
- 蘇武牧羊傳紅色故事觀后感
- 第3課《列夫·托爾斯泰》課件-2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)下冊(cè)
- TSDLPA 0001-2024 研究型病房建設(shè)和配置標(biāo)準(zhǔn)
- 陜09J01 建筑用料及做法圖集
- 安全教育培訓(xùn)記錄表參考模板范本
- 建筑冷熱源素材
- 網(wǎng)絡(luò)安全用戶實(shí)體行為分析技術(shù)UEBA白皮書
- 室內(nèi)設(shè)計(jì)-中式古典風(fēng)格課件
- MOC3061驅(qū)動(dòng)BT134雙向可控硅
- 無(wú)線通信與網(wǎng)絡(luò)復(fù)習(xí)資料
- 八大員考試試題——?jiǎng)趧?wù)員題庫(kù)
- 人教版小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)教材分析
評(píng)論
0/150
提交評(píng)論