版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第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ù)對數(shù)據(jù)執(zhí)行操作并返回處理結(jié)果。-4-什么是函數(shù)?每個程序中有且僅有1個main函數(shù),其它函數(shù)可根據(jù)需要定義。程序運(yùn)行時,系統(tǒng)會調(diào)用main函數(shù),main函數(shù)執(zhí)行結(jié)束后整個程序結(jié)束。main函數(shù)可調(diào)用其它函數(shù),函數(shù)之間可以相互調(diào)用。每個函數(shù)都有名稱,可用于調(diào)用它。函數(shù)被調(diào)用后,執(zhí)行其中的語句,語句執(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個參數(shù)length和width函數(shù)的聲明是1條語句,要以分號結(jié)尾。聲明也叫原型,不
包含任何代碼。函數(shù)可返回任意C++數(shù)據(jù)類型。如果函數(shù)不返回值,將返回
類型寫為void,而不是空缺。函數(shù)名稱、參數(shù)及其排列順序構(gòu)成了函數(shù)的簽名,函數(shù)簽名
唯一地標(biāo)識了一個特定的函數(shù)。-7-函數(shù)的定義函數(shù)的定義給出函數(shù)的具體行為,函數(shù)定義包括函數(shù)頭和函數(shù)體,函數(shù)體由若干語句構(gòu)成,放在{}內(nèi)。intfindArea(intl,intw){ intarea=l*w; returnarea;}函數(shù)頭與函數(shù)原型類似,但結(jié)尾不能加分號。如果函數(shù)返回一個值,函數(shù)體內(nèi)至少包含1條return語句,return語句可返回類型匹配的常量、變量、表達(dá)式結(jié)果。聲明和定義的匹配函數(shù)的聲明和函數(shù)的定義需要匹配,否則無法通過編譯。匹配時檢查返回值類型、函數(shù)名稱、參數(shù)類型及順序,但不用匹配參數(shù)名稱。intfindArea(int,int);-8-函數(shù)聲明可以只給出參數(shù)類型,但語義不夠清晰,聲明和定義處的參數(shù)名稱可以不同,編譯器忽略聲明處的參數(shù)名稱。函數(shù)名應(yīng)符合標(biāo)識符規(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ù)體內(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ù)時局部變量被創(chuàng)建,函數(shù)返回后,所有局部變量被銷毀,不能再被訪問。函數(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局部變量。變量作用域:變量存在的范圍,塊語句中聲明的變量只能存在于當(dāng)前塊。全局變量C++中允許在函數(shù)外面定義變量,稱為全局變量,全局變量在程序的任何地方都可使用。全局變量的作用域?yàn)槿郑梢栽诔绦虻娜魏魏瘮?shù)中被訪問。-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ù)雜程序中,全局變量會導(dǎo)致程序錯誤
難以修改(任意一條語句都有可能修改全局變量的值)良好編程習(xí)慣:應(yīng)避免使用全局變量!!函數(shù)參數(shù)函數(shù)通過參數(shù)(形參)接收信息,函數(shù)可以包含多個參數(shù),多個參數(shù)之間用逗號分割。函數(shù)調(diào)用時,提供值(實(shí)參)可以是常量、變量、表達(dá)式、其它函數(shù)調(diào)用的返回值。函數(shù)的形參屬于函數(shù)的局部變量,函數(shù)返回后局部變量就被銷毀,無法再訪問了。-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)部,對自己的局部變
量x和y進(jìn)行交換,函數(shù)返回后,
調(diào)用處的x和y沒有變化。-21-本章內(nèi)容安排函數(shù)的概念函數(shù)的聲明與定義函數(shù)中的變量函數(shù)返回值默認(rèn)參數(shù)函數(shù)重載內(nèi)聯(lián)函數(shù)從函數(shù)返回值函數(shù)可以返回一個值或不返回值(用void表示)使用return關(guān)鍵詞從函數(shù)返回值,返回的值可以是常量、變量、表達(dá)式、其它函數(shù)調(diào)用的返回值。遇到return語句后,將立即返回到調(diào)用函數(shù)語句處,return之后的所有語句不再執(zhí)行。-22--23-判斷是否閏年?boolisLeapYear(intyear){
if(year%4==0) {
if(year%100==0) {
if(year%400==0) returntrue; else returnfalse; } else returntrue; } else returnfalse;}閏年的兩個基本條件1)能被4整除,但不不能被100整除2)能被4、100和400同時整除只要執(zhí)行到4個return語句中的一個,
函數(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ù)聲明為接收一個或多個參數(shù)時,調(diào)用函數(shù)時必須使用數(shù)據(jù)類型匹配的實(shí)參。
boolisLeapYear(intyear);調(diào)用isLeapYear函數(shù)時,必須提供一個類型為int的實(shí)參。如果調(diào)用時傳遞的參數(shù)少了、多了或者類型不匹配,編譯器將報錯。
isLeapYear();//調(diào)用函數(shù)-26-X形參和實(shí)參的類型并不要求嚴(yán)格相同,如實(shí)參為float類型
形參可以為double類型,系統(tǒng)會自動轉(zhuǎn)換。只有當(dāng)類型不
兼容時,編譯器才會報錯。良好編程習(xí)慣:形參和實(shí)參類型保持一致。指定參數(shù)默認(rèn)值如果在函數(shù)聲明中指定了參數(shù)的默認(rèn)值,調(diào)用函數(shù)時可以不傳遞相應(yīng)的實(shí)參,此時使用默認(rèn)值作為實(shí)參傳遞給函數(shù)。
boolisLeapYear(intyear=2011);
isLeapYear();//調(diào)用函數(shù)
isLeapYear(2011);
-27-在函數(shù)原型中聲明缺省值,在函數(shù)定義處無需定義缺省值。默認(rèn)值規(guī)則如果函數(shù)有多個參數(shù),可以分別為其指定默認(rèn)值。規(guī)則:從某個參數(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ù)頭)指定默認(rèn)值。良好編程習(xí)慣:為所有函數(shù)提供原型,在原型中指定默認(rèn)值
調(diào)用函數(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++中允許定義多個同名的函數(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)用哪個版本的store。不能通過函數(shù)返回值類型判斷重載函數(shù)的版本,如果兩個同名函數(shù)的參數(shù)類型和個數(shù)一致,而返回值類型不同,編譯器將報錯。
intmyFun(int,int); floatmyFun(int,int);-33-X函數(shù)重載的用途通過函數(shù)重載,可以創(chuàng)建針對不同數(shù)據(jù)類
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度對講機(jī)分銷商招募與合作合同2篇
- 2024年船舶租賃與船舶代理及報關(guān)服務(wù)協(xié)議3篇
- 二零二五年度家政服務(wù)派遣合同實(shí)現(xiàn)家庭生活品質(zhì)提升2篇
- 二零二五年度廚具安裝與智能化廚房設(shè)計合同3篇
- 二零二五年度國際旅游線路定制合同范本2篇
- 2025版城市公共交通運(yùn)營管理合同范本
- 2024年自建住宅施工合同標(biāo)準(zhǔn)文本6篇
- 二零二五年度房地產(chǎn)公司財務(wù)風(fēng)險管理體系建設(shè)合同3篇
- 2024年相機(jī)租賃及配套設(shè)備銷售協(xié)議3篇
- 2025版酒店加盟品牌管理培訓(xùn)合同范本3篇
- 新人教版一年級數(shù)學(xué)下冊全冊導(dǎo)學(xué)案
- 2025年中考語文復(fù)習(xí)之現(xiàn)代文閱讀:非連續(xù)性文本閱讀(10題)
- 普外科醫(yī)療組長競聘演講
- 北京市朝陽區(qū)2022-2023學(xué)年三年級上學(xué)期英語期末試卷
- GB/T 9755-2024合成樹脂乳液墻面涂料
- 嗶哩嗶哩MATES人群資產(chǎn)經(jīng)營白皮書【嗶哩嗶哩】
- 【歷史】第一、二單元測試題2024~2025學(xué)年統(tǒng)編版七年級歷史上冊
- 婚姻家庭規(guī)劃
- 認(rèn)識實(shí)習(xí)報告(10篇)
- 【MOOC】內(nèi)科護(hù)理學(xué)-中山大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年商業(yè)地產(chǎn)買賣合同樣本
評論
0/150
提交評論