C++學(xué)習(xí)筆記——調(diào)用函數(shù)
1函數(shù)是什么
函數(shù)是程序的一部分,可對(duì)數(shù)據(jù)執(zhí)行操作并返回一個(gè)值。每個(gè)c++至少有一個(gè)函數(shù):main()
2聲明與定義函數(shù)
編寫函數(shù)代碼前應(yīng)該聲明該函數(shù)荤胁,包括返回類型船逮、函數(shù)名和形參列表
函數(shù)定義之前說過了薇搁,此處就略了跪削。
例如:
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)為碘耳,只要是被代碼塊{}所包裹起來的變量都是局部變量显设,而在代碼塊之外定義的變量則是全局變量
程序清單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è)重載版本的返回值可以相同隙弛,也可以不同,然而狞山,不能通過修改返回類型來重載函數(shù)全闷,相反,形參類型與形參數(shù)量必須不同
舉例:
intaverage(int,int);
longaverage(long,long);
floataverage(float,float);//函數(shù)定義就不寫了
調(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ù)和返回有一定的開銷媒惕,如果函數(shù)包含的語句很少,就可以通過避免跳轉(zhuǎn)來提高效率来庭。在這種情況下妒蔚,通過避免函數(shù)調(diào)用,程序的運(yùn)行速度將更快月弛。
聲明c++函數(shù)時(shí)肴盏,如果使用了關(guān)鍵字inline,編譯器將不會(huì)創(chuàng)建該函數(shù)帽衙,而將代碼直接復(fù)制到調(diào)用它的地方菜皂,就像您在哪里輸入了函數(shù)的語句一樣。如果該內(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