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ù)

編寫函數(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翩剪,一起剝皮案震驚了整個(gè)濱河市乳怎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌前弯,老刑警劉巖蚪缀,帶你破解...
    沈念sama閱讀 211,496評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異博杖,居然都是意外死亡椿胯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門剃根,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哩盲,“玉大人,你說我怎么就攤上這事×停” “怎么了惠险?”我有些...
    開封第一講書人閱讀 157,091評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)抒线。 經(jīng)常有香客問我班巩,道長(zhǎng),這世上最難降的妖魔是什么嘶炭? 我笑而不...
    開封第一講書人閱讀 56,458評(píng)論 1 283
  • 正文 為了忘掉前任抱慌,我火速辦了婚禮,結(jié)果婚禮上眨猎,老公的妹妹穿的比我還像新娘抑进。我一直安慰自己,他們只是感情好睡陪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,542評(píng)論 6 385
  • 文/花漫 我一把揭開白布寺渗。 她就那樣靜靜地躺著,像睡著了一般兰迫。 火紅的嫁衣襯著肌膚如雪信殊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評(píng)論 1 290
  • 那天汁果,我揣著相機(jī)與錄音涡拘,去河邊找鬼。 笑死须鼎,一個(gè)胖子當(dāng)著我的面吹牛鲸伴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晋控,決...
    沈念sama閱讀 38,945評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼汞窗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了赡译?” 一聲冷哼從身側(cè)響起仲吏,我...
    開封第一講書人閱讀 37,709評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝌焚,沒想到半個(gè)月后裹唆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,158評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡只洒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,502評(píng)論 2 327
  • 正文 我和宋清朗相戀三年许帐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毕谴。...
    茶點(diǎn)故事閱讀 38,637評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡成畦,死狀恐怖距芬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情循帐,我是刑警寧澤框仔,帶...
    沈念sama閱讀 34,300評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站拄养,受9級(jí)特大地震影響离斩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瘪匿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,911評(píng)論 3 313
  • 文/蒙蒙 一跛梗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柿顶,春花似錦茄袖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聂薪。三九已至家乘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藏澳,已是汗流浹背仁锯。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翔悠,地道東北人业崖。 一個(gè)月前我還...
    沈念sama閱讀 46,344評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蓄愁,于是被迫代替她去往敵國和親双炕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,500評(píng)論 2 348