C++學(xué)習(xí)筆記——調(diào)用函數(shù)

C++學(xué)習(xí)筆記——調(diào)用函數(shù)

1函數(shù)是什么

函數(shù)是程序的一部分,可對(duì)數(shù)據(jù)執(zhí)行操作并返回一個(gè)值。每個(gè)c++至少有一個(gè)函數(shù):main()

2聲明與定義函數(shù)

編寫(xiě)函數(shù)代碼前應(yīng)該聲明該函數(shù),包括返回類型、函數(shù)名和形參列表

函數(shù)定義之前說(shuō)過(guò)了,此處就略了。

例如:

intgetArea(intlength,intwidth);//函數(shù)聲明

intgetArea(intlength,intwidth)

{

returnlength*width;

}//函數(shù)定義


3在函數(shù)中使用變量

局部變量與全局變量:

局部變量:函數(shù)內(nèi)創(chuàng)建的變量為局部變量,函數(shù)返回后,其所有局部變量都不能供程序使用。

全局變量:在c++中,可在函數(shù)(包括main()函數(shù))外定義c++變量,這種全局變量在程序的任何地方都可用。函數(shù)外定義的變量的作用域?yàn)槿?,音詞可在程序的任何函數(shù)中使用

我認(rèn)為,只要是被代碼塊{}所包裹起來(lái)的變量都是局部變量,而在代碼塊之外定義的變量則是全局變量

程序清單5.3 Global.cpp

#include

voidconvert();

floatfahrenheit;

floatcelsius;

intmain()

{

std::cout<<"Please enter the temperature in Fahrenheit: ";

std::cin>>fahrenheit;

convert();

std::cout<<"\nHere's the temperature in Celsius: ";

std::cout<

return0;

}

?

voidconvert()

{

celsius= ((fahrenheit-32)*5)/9;

}

4.從函數(shù)返回值

函數(shù)返回一個(gè)值或void。要從函數(shù)返回一個(gè)值,可使用關(guān)鍵字return,并在它后面指定要返回的值。這個(gè)值可以是字面量、變量或表達(dá)式,因?yàn)樗斜磉_(dá)式都生成一個(gè)值。

程序清單5.4 LeapYear.cpp

#include

boolisLeapYear(intyear);

?

intmain()

{

intinput;

std::cout<<"Please enter a year: ";

std::cin>>input;

if (isLeapYear(input))

std::cout<

else

std::cout<

return0;

}

?

boolisLeapYear(intyear)

{

if (year%4==0)

{

if (year%100==0)

{

if (year%400==0)

returntrue;

else

returnfalse;

}

else

returntrue;

}

else

returnfalse;

}


5.默認(rèn)函數(shù)形參

程序清單5.5 AreaCube.cpp

#include

intfindArea(intlength,intwidth=20,intheight=12);

?

intmain()

{

intlength=100;

intwidth=50;

intheight=2;

intarea;

?

area=findArea(length,width,height);

std::cout<<"First area: "<

area=findArea(length,width);

std::cout<<"second area: "<

area=findArea(length);

std::cout<<"Third area: "<

return0;

}

?

intfindArea(intlength,intwidth,intheight)

{

return (length*width*height);

}

?


6.函數(shù)重載

c++中,可以有多個(gè)同名函數(shù),只要他們的形參不同即可,這稱為函數(shù)重載,又稱函數(shù)多態(tài)

多個(gè)重載版本的返回值可以相同,也可以不同,然而,不能通過(guò)修改返回類型來(lái)重載函數(shù),相反,形參類型與形參數(shù)量必須不同

舉例:

intaverage(int,int);

longaverage(long,long);

floataverage(float,float);//函數(shù)定義就不寫(xiě)了

調(diào)用函數(shù)average()時(shí),只需傳遞合適的數(shù)據(jù),就將調(diào)用相應(yīng)的重載版本。


內(nèi)聯(lián)函數(shù):

當(dāng)定義函數(shù)時(shí),c++編譯器只在內(nèi)存中創(chuàng)建一組指令,每當(dāng)調(diào)用該函數(shù)時(shí),都將跳轉(zhuǎn)到這些指令,而函數(shù)返回時(shí),將跳轉(zhuǎn)到調(diào)用代碼的下一行。如果程序調(diào)用了函數(shù)10次,每次都將跳轉(zhuǎn)到同一組指令,即只有一個(gè)函數(shù)指令拷貝,而不是10個(gè)。跳轉(zhuǎn)到函數(shù)和返回有一定的開(kāi)銷,如果函數(shù)包含的語(yǔ)句很少,就可以通過(guò)避免跳轉(zhuǎn)來(lái)提高效率。在這種情況下,通過(guò)避免函數(shù)調(diào)用,程序的運(yùn)行速度將更快。

聲明c++函數(shù)時(shí),如果使用了關(guān)鍵字inline,編譯器將不會(huì)創(chuàng)建該函數(shù),而將代碼直接復(fù)制到調(diào)用它的地方,就像您在哪里輸入了函數(shù)的語(yǔ)句一樣。如果該內(nèi)聯(lián)函數(shù)被調(diào)用和10次,內(nèi)聯(lián)代碼將總共復(fù)制10次,細(xì)微的速度改善可能因可執(zhí)行程序的增大而抵消。

要將函數(shù)聲明為內(nèi)聯(lián)的,可在函數(shù)原型中使用關(guān)鍵字inline。

inlineintdouble(int);

而不用修改函數(shù)本身:

intdouble(inttarget)

{

return2*target;

}


7.自動(dòng)確定返回值類型

c++14新增的功能之一是,使用關(guān)鍵字auto讓編譯器自動(dòng)推斷函數(shù)的返回類型

程序清單5.6 AutoCube.cpp

#include

autofindArea(intlength,intwidth=20,intheight=12);\

?

autofindArea(intlength,intwidth,intheight)

{

return (length*width*height);

}

?

intmain()

{

intlength=100;

intwidth=50;

intheight=2;

intarea;

?

area=findArea(length,width,height);

std::cout<<"First area: "<

area=findArea(length,width);

std::cout<<"second area: "<

area=findArea(length);

std::cout<<"Third area: "<

return0;

}


?原文鏈接:https://www.cnblogs.com/adapter-chen/p/13293628.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容