




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載目錄詳解引用引用的基本使用引用做函數(shù)參數(shù)引用做函數(shù)返回值常量引用引用的本質(zhì)函數(shù)提高函數(shù)默認(rèn)值函數(shù)占位參數(shù)函數(shù)重載及注意事項(xiàng)
詳解引用
引用的基本使用
語(yǔ)法:數(shù)據(jù)類型新變量名=原來變量名
作用:給變量起別名
注意事項(xiàng):
1、引用必須初始化
2、一旦初始化就不能更改(具體原因在下面引用本質(zhì)上會(huì)講到)
示例:
inta=10;intc=20;
如果寫int這是錯(cuò)誤的,沒有初始化引用,編譯器不知道b指向的地址。
所以這樣寫intb=a;那么現(xiàn)在b是a的別名,他們的地址相同,存放的數(shù)據(jù)也都一樣。這時(shí)如果寫b=c;我們不會(huì)認(rèn)為b是c的別名,只會(huì)認(rèn)為是把c的值賦給了b,當(dāng)然也賦給了a
引用做函數(shù)參數(shù)
這是引用最為方便和精辟的地方了,直接代替指針來進(jìn)行引用傳遞,我們舉個(gè)最為經(jīng)典的例子:swap交換函數(shù).
voidswap(intx,inty)
intt=a;
a=b;
b=t;
cout"swap03a="aendl;
cout"swap03b="bendl;
intmain()
inta=10,b=20;
/*值傳遞形參不能修飾實(shí)參
地址傳遞可以修飾實(shí)參*/
swap(a,b);//引用做函數(shù)參數(shù)也可以修飾實(shí)參
}
這里主函數(shù)傳的實(shí)參是a,b形參是intx,inty;不就是intx=a,inty=b嗎,x和a地址相同,y和b地址相同,x和y的變化必會(huì)導(dǎo)致a,b的變化,因此屬于地址傳遞,不會(huì)令編譯器產(chǎn)生副本,節(jié)省空間的同時(shí),代碼也更簡(jiǎn)潔。
引用做函數(shù)返回值
我們知道函數(shù)語(yǔ)法第一個(gè)就要寫函數(shù)返回值類型,在數(shù)據(jù)類型后加上符號(hào),就可以返回該函數(shù)的引用,有的也叫返回函數(shù)的地址,其實(shí)意思都一樣,只是叫法不同罷了。
注意事項(xiàng):
1、不要返回局部變量的引用
2、返回函數(shù)的引用可以作為左值
示例:
#includeiostream
usingnamespacestd;
intfunc1()
inta=10;//局部變量放在四區(qū)中的棧區(qū),返回后會(huì)被編譯器自動(dòng)銷毀
returna;
intfunc2()
staticinta=10;
returna;
intmain()
intref1=func1();
intref2=func2();
cout"a="ref1endl;
cout"a="ref1endl;//亂碼
cout"a="ref2endl;
func2()=1000;//如果函數(shù)的返回值是引用,那這個(gè)函數(shù)調(diào)用可以作為左值
cout"a="ref2endl;
}
func1函數(shù)開辟在棧區(qū),返回的引用會(huì)被編譯器自動(dòng)釋放掉,main函數(shù)中我用ref1作為func1的引用返回,并輸出ref1的值,不出意外,第二次輸出的時(shí)候會(huì)出現(xiàn)亂碼,其實(shí)就是ref的新地址,func1返回的地址已經(jīng)被釋放掉,第一次能輸出是因?yàn)榫幾g器做出了保留。func2雖然也是開辟在棧區(qū),但是a的地址卻是放在了全局區(qū),由操作系統(tǒng)自動(dòng)釋放,所以返回func2的引用不會(huì)被編譯器釋放,而且可以作為左值變化數(shù)據(jù),最后一個(gè)cout結(jié)構(gòu)必當(dāng)是1000,附上結(jié)果圖。
常量引用
這個(gè)就好理解了,就是傳參的時(shí)候加上const關(guān)鍵字,防止誤操作
示例:
//打印數(shù)據(jù)函數(shù)
voidshowData(constinta){
//a=100;這里不能做出修改,防止誤操作
couta=aendl;
}
引用的本質(zhì)
引用的本質(zhì)是一個(gè)指針常量
編譯器發(fā)現(xiàn)是引用自動(dòng)將intref=a;轉(zhuǎn)變?yōu)閕nt*constref=并且再給ref賦值時(shí),自動(dòng)解引用ref=100改為*ref=100
示例:
voidfun1(intref)//自動(dòng)轉(zhuǎn)變?yōu)閕nt*constref=a
{
ref=100;//轉(zhuǎn)換成*ref=100
}
C++推薦使用引用,因?yàn)橐玫谋举|(zhì)是指針常量,但是有關(guān)指針的操作編譯器都幫我們做了
函數(shù)提高
學(xué)習(xí)C很快就會(huì)接觸函數(shù)了,這里主要講你少見的函數(shù)形式來做一個(gè)函數(shù)提高
函數(shù)默認(rèn)值
語(yǔ)法:返回類型值函數(shù)名(形參=默認(rèn)值){}
注意事項(xiàng)
1、如果某個(gè)位置已經(jīng)有默認(rèn)參數(shù),那么從這個(gè)位置開始從左往右都要有默認(rèn)值
2、聲明和實(shí)現(xiàn)只能有一個(gè)有默認(rèn)參數(shù),如果聲明的時(shí)候給了形參默認(rèn)值,那么下面對(duì)函數(shù)的實(shí)現(xiàn)就不能再給該形參默認(rèn)值
示例:
intfun1(inta,intb,intc=50);
intfun1(inta,intb,intc)
returna+b+c;
intmain()
coutfun1(10,30)endl;
}
這里cout的結(jié)果我們都能猜到是90;如果我們修改代碼給形參b默認(rèn)值,而不給c默認(rèn)值,就會(huì)違反第一個(gè)注意事項(xiàng),這時(shí)給c也默認(rèn)值就解決問題了。
函數(shù)占位參數(shù)
語(yǔ)法:返回值類型函數(shù)名(數(shù)據(jù)類型){}
占位參數(shù)可以有默認(rèn)參數(shù):
voidfun2(inta,int=20)
{
coutaisthisisfun2endl;
}
調(diào)用:
fun2(10);
結(jié)果:
10isthisisfun2
函數(shù)重載及注意事項(xiàng)
函數(shù)重載需要函數(shù)都在一個(gè)作用域下
函數(shù)名相同,提高復(fù)用性
函數(shù)參數(shù)類型不同或者個(gè)數(shù)不同順序不同
#includeiostream
usingnamespacestd;
voidfunc()
cout"func的調(diào)用"endl;
voidfunc(inta)
cout"func(inta)的調(diào)用"endl;
voidfunc(doublea)
cout"func(doublea)的調(diào)用"endl;
voidfunc(inta,doubleb)
cout"func(inta,doubleb)的調(diào)用"endl;
voidfunc(doubleb,inta)
cout"func(doubelb,inta)的調(diào)用"endl;
//函數(shù)返回值不可以做重載條件
intmain()
func();
func(10);
func(12.3);
func(10,20.1);
func(30.1,20);
}
這里寫五個(gè)func函數(shù),四個(gè)重載,并配上提示助理解,輸出結(jié)果如下:
函數(shù)重載注意事項(xiàng):
1、引用可作為重載的條件
voidfunct(inta)
cout"funct(inta)的調(diào)用"endl;
voidfunct(constinta)
cout"funct(constinta)的調(diào)用"endl;
}
調(diào)用方法:inta=10;funct(a);funct(20);重載時(shí)加上const關(guān)鍵字就相當(dāng)于是一個(gè)常量,調(diào)用的時(shí)候直接寫入數(shù)據(jù)即可。
2、函數(shù)重載碰到默認(rèn)參數(shù)
voidfunc2(inta,intb=10)
c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件設(shè)計(jì)師考試準(zhǔn)備技巧試題及答案
- 非營(yíng)利組織在政策中的角色試題及答案
- 農(nóng)業(yè)科技成果轉(zhuǎn)化與新型農(nóng)業(yè)經(jīng)營(yíng)主體創(chuàng)新發(fā)展路徑研究
- 軟件設(shè)計(jì)師考試高頻考點(diǎn)試題及答案
- 2025年高校產(chǎn)學(xué)研合作技術(shù)轉(zhuǎn)移與成果轉(zhuǎn)化中的企業(yè)參與機(jī)制研究
- 硬件與網(wǎng)絡(luò)搭建相關(guān)試題及答案
- 公共政策對(duì)社會(huì)發(fā)展的影響試題及答案
- 軟件設(shè)計(jì)師清晰思路訓(xùn)練試題及答案
- 文化創(chuàng)意產(chǎn)業(yè)對(duì)城市經(jīng)濟(jì)發(fā)展的推動(dòng)
- 刷題寶典信息系統(tǒng)項(xiàng)目管理師試題及答案
- 個(gè)人商業(yè)計(jì)劃書范文5篇
- 2025年反恐與公共安全管理職業(yè)資格考試試卷及答案
- 福建卷-2025屆高考化學(xué)全真模擬卷
- 2022隧道順光照明技術(shù)指南
- 2025年廣東省廣州市增城區(qū)中考一?;瘜W(xué)試題(含答案)
- 2025高考英語(yǔ)作文考前背誦(應(yīng)用文+讀后續(xù)寫)
- 河北開放大學(xué)2025年《西方行政制度》形成性考核3答案
- 人教版九年級(jí)語(yǔ)文中考真題匯編 《水滸傳》(2022-2024)全國(guó)中考語(yǔ)文真題
- 2025年鐵路列車員(初級(jí))職業(yè)技能鑒定參考試題庫(kù)(含答案)
- 2024春形勢(shì)與政策-鑄牢中華民族共同體意識(shí)課件
- 2024年湖南省中考道德與法治試題卷(含答案)
評(píng)論
0/150
提交評(píng)論