C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載_第1頁(yè)
C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載_第2頁(yè)
C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載_第3頁(yè)
C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載_第4頁(yè)
C++簡(jiǎn)明分析講解引用與函數(shù)提高及重載_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論