目錄
一、缺省函數(shù)
1.1什么是缺省函數(shù)
1.2為什么要有缺省函數(shù)
1.3使用缺省函數(shù)
1.4測(cè)試代碼
二、函數(shù)重載
2.1什么是函數(shù)重載?
2.2為什么要有函數(shù)重載
2.3什么情況構(gòu)成函數(shù)重載
2.4函數(shù)重載例子及代碼
?三、引用
3.1什么是引用
3.2如何引用
?3.3常引用(可略過)
3.4引用和指針的對(duì)比
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-713990.html
前言:C++初階系列,每一期博主都會(huì)使用簡(jiǎn)單樸素的語(yǔ)言將對(duì)應(yīng)的知識(shí)分享給大家,爭(zhēng)取讓所有人都可以聽懂,C++初階系列會(huì)持續(xù)更新,上學(xué)期間將不定時(shí)更新,但總會(huì)更的
一、缺省函數(shù)
1.1什么是缺省函數(shù)
c++中,定義函數(shù)的時(shí)候可以讓最右邊的連續(xù)若干個(gè)參數(shù)有缺省值,在調(diào)用函數(shù)的時(shí)候,如果不寫相應(yīng)位置的參數(shù),則調(diào)用的參數(shù)就為缺省值,如此便構(gòu)成了缺省函數(shù)
1.2為什么要有缺省函數(shù)
有的小伙伴可能會(huì)覺得,缺省函數(shù)好像并沒有什么使用的場(chǎng)所。但其實(shí)在實(shí)際編寫代碼的過程中,我們有些時(shí)候會(huì)頻繁地調(diào)用某個(gè)函數(shù),而這個(gè)函數(shù)的其他參數(shù)是固定值,在c中遇到這種情況,便只能老實(shí)寫參數(shù),即使這幾個(gè)參數(shù)的數(shù)值你已經(jīng)寫了無(wú)數(shù)次了,但你依然得去寫它,而在c++中,你使用缺省函數(shù)就可以避免這一情況,你完全可以將一些不會(huì)變的參數(shù)或不常變的參數(shù)進(jìn)行缺省,這樣子不僅可以節(jié)約大量的時(shí)間,還可以大大提升代碼的可讀性。
1.3使用缺省函數(shù)
大致了解了一下缺省函數(shù),接下來(lái)讓我們實(shí)踐一下,比方說(shuō)我要計(jì)算一批長(zhǎng)方體的體積,但它們大部分長(zhǎng)寬均為5,高度全都不同。這時(shí)使用缺省函數(shù)便可以很好地解決問題
有的小伙伴便很自然地寫出了下面這段代碼,看似沒有問題,但編譯器卻報(bào)錯(cuò)了。而之所以會(huì)報(bào)錯(cuò)是因?yàn)檫@種寫法時(shí)有歧義的,就像圖中,傳遞了一個(gè)10過去給函數(shù),編譯器該如何知道這個(gè)10是傳給l,w,還是h的?因此我們寫缺省函數(shù)的時(shí)候遵循一個(gè)原則,那就是缺省函數(shù)參數(shù)只能從右往左連續(xù)地缺省,而不能跳躍著或者是間斷著缺省。
簡(jiǎn)單地進(jìn)行修改便可以得到下圖函數(shù),而在之后我們想要很快速的計(jì)算長(zhǎng)寬均為5的長(zhǎng)方體時(shí),便只需要傳遞一個(gè)參數(shù),且當(dāng)我們要計(jì)算的長(zhǎng)方體長(zhǎng)寬不是5時(shí),我們也可以正常地進(jìn)行參數(shù)的傳遞
1.4測(cè)試代碼
#include<iostream>
using namespace std;
float Volume(float h ,float l=5 ,float w=5)
{
return l*w*h;
}
int main()
{
float a = Volume(10);
cout<<"長(zhǎng)方體的體積為" << a << endl;
a = Volume(10,10,5.5);
cout << "長(zhǎng)方體的體積為" << a << endl;
a = Volume(9,6);
cout << "長(zhǎng)方體的體積為" << a << endl;
}
二、函數(shù)重載
2.1什么是函數(shù)重載?
函數(shù)重載:是函數(shù)的一種特殊情況,C++允許在同一作用域中聲明幾個(gè)功能類似的同名函數(shù),這些同名函數(shù)的形參列表(參數(shù)個(gè)數(shù)或類型或類型順序)不同,常用來(lái)處理實(shí)現(xiàn)功能類似數(shù)據(jù)類型不同的問題。
2.2為什么要有函數(shù)重載
看完概念的小伙伴一定會(huì)有一個(gè)疑惑,那就是這個(gè)函數(shù)重載它有用嗎,在學(xué)習(xí)c的時(shí)候老師嚴(yán)肅強(qiáng)調(diào)的一件事就是絕對(duì)不要?jiǎng)?chuàng)建相同名字的函數(shù)或者是相同名字的變量,否則會(huì)導(dǎo)致編譯器識(shí)別紊亂。
而在C++中,反而支持這種行為,這是為什么呢?C++之父Bjarne Stroustrup,在寫出C++這門語(yǔ)言之前是當(dāng)之無(wú)愧大大C語(yǔ)言大師,而他之所以會(huì)去寫一個(gè)新的語(yǔ)言,純粹是因?yàn)樗X得這C語(yǔ)言也太費(fèi)勁了,這也不行那也不行,我想搞幾個(gè)名字相同,功能類似,參數(shù)不同的函數(shù)都不行。
寫個(gè)浮點(diǎn)數(shù)加法得float add_float(float a,float b);再寫個(gè)整型加法得 int add_int(int a,int b); 功能一樣,還得重新給它搞個(gè)名字。
而在C++中就可以不用這么麻煩,直接float add(float a,float b);int?add(int?a,int?b);完全不需要再去取新的名字,一個(gè)名字就搞定了,C++會(huì)自動(dòng)識(shí)別參數(shù)的類型,然后將其運(yùn)用到恰當(dāng)?shù)暮瘮?shù)
2.3什么情況構(gòu)成函數(shù)重載
構(gòu)成函數(shù)重載的情況有兩種,一種是參數(shù)類型不同,一種是參數(shù)個(gè)數(shù)不同。有的書上會(huì)多寫一個(gè)順序不同,但順序不同的本質(zhì)其實(shí)也就是類型不同。而返回值是不作為函數(shù)重載的考慮范圍的,也就是說(shuō),兩個(gè)函數(shù)即使參數(shù)類型和個(gè)數(shù)都相同,它們的返回值不同也是不構(gòu)成函數(shù)重載的。
2.4函數(shù)重載例子及代碼
#include<iostream>
using namespace std;
int add(int a, int b)
{
return a + b;
}
float add(float a, float b)
{
return a + b;
}
int add(int a, float b)
{
return a + b;
}
int main()
{
int a = 20; int b = 101;
float x = 5.5; float y = 3.14;
cout<<add(x,y)<<endl;
cout<<add(a,b)<<endl;
cout<<add(a,x)<<endl;
cout<<add(b,x)<<endl;
}
?三、引用
3.1什么是引用
引用不是新定義一個(gè)變量,而是給已存在變量取了一個(gè)別名,編譯器不會(huì)為引用變量開辟內(nèi)存空間,它和它引用的變量共用同一塊內(nèi)存空間。舉個(gè)例子,孫悟空有很多個(gè)外號(hào):孫行者,行者孫,齊天大圣,斗戰(zhàn)勝佛,弼馬溫,石猴......這些就都是孫悟空的別名,但也都代表著孫悟空,而不是什么六耳獼猴
3.2如何引用
在創(chuàng)建變量的時(shí)候,在變量名前加&即可實(shí)現(xiàn),注意:在這里不是取地址符。通過圖片可以看出,a是b,b也是a,b和a的本質(zhì)是一樣的
打印地址更是強(qiáng)有力的證明了我們的觀點(diǎn)?
必須重視的幾點(diǎn)
1.引用在定義時(shí)必須要初始化
2.一個(gè)變量可以有多個(gè)引用,就像一個(gè)人可以有多個(gè)外號(hào)一樣
3.引用一旦指向了一個(gè)實(shí)體就不能再指向其他實(shí)體,可理解為一個(gè)外號(hào)不能對(duì)應(yīng)多個(gè)人
接下來(lái)挨個(gè)驗(yàn)證
引用在定義時(shí)必須要初始化
一個(gè)變量可以有多個(gè)引用,就像一個(gè)人可以有多個(gè)外號(hào)一樣?
?引用一旦指向了一個(gè)實(shí)體就不能再指向其他實(shí)體,可理解為一個(gè)外號(hào)不能對(duì)應(yīng)多個(gè)人
3.3常引用(可略過)
? 在對(duì)常量進(jìn)行引用的時(shí)候我們需要注意的一點(diǎn)便是,不能夠放大權(quán)限,a既然不能被修改,那么它的別名更不可能被修改。雖然權(quán)限不能放大,但權(quán)限是可以縮小或等價(jià)的,等價(jià)就如我們平時(shí)的引用,兩邊的基本類型相同,縮小便是在原變量的基礎(chǔ)上給它進(jìn)一步的限制。
放大權(quán)限
縮小權(quán)限
可以看出,a依然可以對(duì)值進(jìn)行修改,但b不可以。這在實(shí)踐中是非常有用的?
?
3.4引用和指針的對(duì)比
可以看的出第一個(gè)使用引用的Swap函數(shù)是很美觀的,沒有那么多的解引用符號(hào),這大大增加了代碼的可讀性。
總結(jié):(第五點(diǎn)自己去證明下)
1. 引用概念上定義一個(gè)變量的別名,指針存儲(chǔ)一個(gè)變量地址。
2. 引用在定義時(shí)必須初始化,指針沒有要求
3. 引用在初始化時(shí)引用一個(gè)實(shí)體后,就不能再引用其他實(shí)體,而指針可以在任何時(shí)候指向任何
一個(gè)同類型實(shí)體
4. 沒有NULL引用,但有NULL指針
5. 在sizeof中含義不同:引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個(gè)數(shù)(32
位平臺(tái)下占4個(gè)字節(jié))
6. 引用自加即引用的實(shí)體增加1,指針自加即指針向后偏移一個(gè)類型的大小
好了,今天的分享到這里就結(jié)束了,感謝各位友友的來(lái)訪和閱讀,祝各位友友們前程似錦O(∩_∩)O?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-713990.html
?
到了這里,關(guān)于C++初階 入門(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!