亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++簡明分析講解引用與函數(shù)提高及重載

 更新時間:2022年05月18日 09:31:33   作者:對象new不出來  
今天繼續(xù)開始對C++核心編程知識的分享與系統(tǒng)講解,第一,這里會提到“引用”方法傳參以及剖析引用的本質(zhì);第二,我們對函數(shù)來一個提高,相當(dāng)于進(jìn)階函數(shù)了,包括函數(shù)的默認(rèn)值,簡單的提一下函數(shù)的占位參數(shù),函數(shù)重載以及注意事項,接下來上正文

詳解引用

引用的基本使用

語法:數(shù)據(jù)類型 &新變量名 =原來變量名

作用:給變量起別名

注意事項:

1、引用必須初始化

2、一旦初始化就不能更改(具體原因在下面引用本質(zhì)上會講到)

示例:

int a = 10; int c = 20;

如果寫 int &b;這是錯誤的,沒有初始化引用,編譯器不知道b指向的地址。

所以這樣寫 int &b=a;那么現(xiàn)在b是a 的別名,他們的地址相同,存放的數(shù)據(jù)也都一樣。這時如果寫 b=c;我們不會認(rèn)為 b是c的別名,只會認(rèn)為是把c的值賦給了b,當(dāng)然也賦給了a

引用做函數(shù)參數(shù)

這是引用最為方便和精辟的地方了,直接代替指針來進(jìn)行引用傳遞,我們舉個最為經(jīng)典的例 子:swap交換函數(shù).

void swap(int &x,int &y)
{
	int t = a;
	a = b;
	b = t;
	cout << "swap03 a =" << a << endl;
	cout << "swap03 b =" << b << endl;
}
int main()
{
    int a = 10, b = 20;
	/*值傳遞形參不能修飾實參
	地址傳遞可以修飾實參*/
	swap(a, b);//引用做函數(shù)參數(shù)也可以修飾實參
}

這里主函數(shù)傳的實參是a,b 形參是int &x,int &y;不就是int &x= a, int &y= b 嗎,x和a地址相同,y和b地址相同,x和y的變化必會導(dǎo)致a,b的變化,因此屬于地址傳遞,不會令編譯器產(chǎn)生副本,節(jié)省空間的同時,代碼也更簡潔。

引用做函數(shù)返回值

我們知道函數(shù)語法第一個就要寫函數(shù)返回值類型,在數(shù)據(jù)類型后加上&符號,就可以返回該函數(shù)的引用,有的也叫返回函數(shù)的地址,其實意思都一樣,只是叫法不同罷了。

注意事項:

1、不要返回局部變量的引用

2、返回函數(shù)的引用可以作為左值

示例:

#include<iostream>
using namespace std;
int& func1()
{
	int a = 10;//局部變量放在四區(qū)中的棧區(qū),返回后會被編譯器自動銷毀
	return a;
}
int& func2()
{
	static int a = 10;
	return a;
}
int main()
{
	int& ref1 = func1();
	int& ref2 = func2();
	cout << "a =" << ref1 << endl;
	cout << "a =" << ref1 << endl;//亂碼
	cout << "a =" << ref2 << endl;
	func2() = 1000;//如果函數(shù)的返回值是引用,那這個函數(shù)調(diào)用可以作為左值
	cout << "a =" << ref2 << endl;
}

func1函數(shù)開辟在棧區(qū),返回的引用會被編譯器自動釋放掉,main函數(shù)中我用&ref1作為func1的引用返回,并輸出ref1的值,不出意外,第二次輸出的時候會出現(xiàn)亂碼,其實就是ref的新地址,func1返回的地址已經(jīng)被釋放掉,第一次能輸出是因為編譯器做出了保留。func2雖然也是開辟在棧區(qū),但是a 的地址卻是放在了全局區(qū),由操作系統(tǒng)自動釋放,所以返回func2的引用不會被編譯器釋放,而且可以作為左值變化數(shù)據(jù),最后一個cout結(jié)構(gòu)必當(dāng)是1000,附上結(jié)果圖。

常量引用

這個就好理解了,就是傳參的時候加上const關(guān)鍵字,防止誤操作

示例:

//打印數(shù)據(jù)函數(shù)

void showData(const int& a) {

//a=100; 這里不能做出修改,防止誤操作

cout << "a=" <<a<< endl;

}

引用的本質(zhì)

引用的本質(zhì)是一個指針常量

編譯器發(fā)現(xiàn)是“引用”自動將int &ref=a;轉(zhuǎn)變?yōu)?int *const ref=&a;并且再給 ref賦值時,自動解引用 ref=100 改為 *ref = 100

示例:

void fun1(int &ref) //自動轉(zhuǎn)變?yōu)?int *const ref=&a

{

ref = 100; //轉(zhuǎn)換成*ref=100

}

C++推薦使用引用,因為引用的本質(zhì)是指針常量,但是有關(guān)指針的操作編譯器都幫我們做了

函數(shù)提高

學(xué)習(xí)C很快就會接觸函數(shù)了,這里主要講你少見的函數(shù)形式來做一個函數(shù)提高

函數(shù)默認(rèn)值

語法:返回類型值 函數(shù)名 (形參=默認(rèn)值){}

注意事項

1、如果某個位置已經(jīng)有默認(rèn)參數(shù),那么從這個位置開始從左往右都要有默認(rèn)值

2、聲明和實現(xiàn)只能有一個有默認(rèn)參數(shù),如果聲明的時候給了形參默認(rèn)值,那么下面對函數(shù)的實現(xiàn)就不能再給該形參默認(rèn)值

示例:

int fun1(int a, int b, int c=50);
int fun1(int a, int b, int c)
{
	return a + b + c;
}
int main()
{
	cout << fun1(10,30) << endl;
}

這里cout的結(jié)果我們都能猜到是90;如果我們修改代碼給形參b默認(rèn)值,而不給c默認(rèn)值,就會違反第一個注意事項,這時給c也默認(rèn)值就解決問題了。

函數(shù)占位參數(shù)

語法:返回值類型 函數(shù)名(數(shù)據(jù)類型){}

占位參數(shù)可以有默認(rèn)參數(shù):

void fun2(int a,int=20)

{

cout << a<<"is this is fun2" << endl;

}

調(diào)用:

fun2(10);

結(jié)果:

10is this is fun2

函數(shù)重載及注意事項

函數(shù)重載需要函數(shù)都在一個作用域下

函數(shù)名相同,提高復(fù)用性

函數(shù)參數(shù)類型不同 或者 個數(shù)不同 順序不同

#include<iostream>
using namespace std;
void func()
{
	cout << "func 的調(diào)用" << endl;
}
void func(int a)
{
	cout << "func(int a)的調(diào)用" << endl;
}
void func(double a)
{
	cout << "func(double a)的調(diào)用" << endl;
}
void func(int a, double b)
{
	cout << "func(int a,double b)的調(diào)用" << endl;
}
void func(double b,int a)
{
	cout << "func(doubel b,int a)的調(diào)用" << endl;
}
//函數(shù)返回值不可以做重載條件
int main()
{
	func();
	func(10);
	func(12.3);
	func(10,20.1);
	func(30.1,20);
}

這里寫五個func函數(shù),四個重載,并配上提示助理解,輸出結(jié)果如下:

函數(shù)重載注意事項:

1、引用可作為重載的條件

void funct(int& a)
{
	cout << "funct(int &a)的調(diào)用" << endl;
}
void funct(const int& a)
{
	cout << "funct(const int &a)的調(diào)用" << endl;
}

調(diào)用方法:int a = 10; funct(a); funct(20);重載時加上const 關(guān)鍵字就相當(dāng)于是一個常量,調(diào)用的時候直接寫入數(shù)據(jù)即可。

2、函數(shù)重載碰到默認(rèn)參數(shù)

void func2(int a,int b=10)
{
	cout << "func(int a,int b)的調(diào)用" << endl;
}
void func2(int a)
{
	cout << "func(double a)的調(diào)用" << endl;
}

這里調(diào)用func2方法必然會報錯,因為兩個函數(shù)發(fā)生了重載,而且調(diào)用方法一致,都是

func2(數(shù)值);那么就會產(chǎn)生二義性,編譯器無法識別調(diào)用的是哪個重載的方法。

到此這篇關(guān)于C++簡明分析講解引用與函數(shù)提高及重載的文章就介紹到這了,更多相關(guān)C++引用與函數(shù)提高內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++?Cartographer的入口node main詳細(xì)講解

    C++?Cartographer的入口node main詳細(xì)講解

    這篇文章主要介紹了C++Node類Cartographer的入口node main,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • 提高C程序效率的10種有效方法

    提高C程序效率的10種有效方法

    本文向你介紹規(guī)范你的C代碼的10種方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C語言中使用qsort函數(shù)對自定義結(jié)構(gòu)體數(shù)組進(jìn)行排序

    C語言中使用qsort函數(shù)對自定義結(jié)構(gòu)體數(shù)組進(jìn)行排序

    這篇文章主要介紹了C語言中使用qsort函數(shù)對自定義結(jié)構(gòu)體數(shù)組進(jìn)行排序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++之WSAAsyncSelect模型實例

    C++之WSAAsyncSelect模型實例

    這篇文章主要介紹了C++的WSAAsyncSelect模型,實例講述了socket與Windows消息機(jī)制的用法,需要的朋友可以參考下
    2014-10-10
  • C語言實現(xiàn)刮刮樂效果是示例代碼

    C語言實現(xiàn)刮刮樂效果是示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何C語言模擬實現(xiàn)刮刮樂的效果,只要按下鼠標(biāo)左鍵并移動就可以刮開刮卡層,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • C++實現(xiàn)新年賀卡程序

    C++實現(xiàn)新年賀卡程序

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)賀卡程序,C++應(yīng)用程序編寫的雪花賀卡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • MFC模擬實現(xiàn)自定義消息發(fā)送

    MFC模擬實現(xiàn)自定義消息發(fā)送

    在MFC框架下,有很多系統(tǒng)已經(jīng)定義好的消息,例如ON_WM_LBUTTONDOWN()、ON_WM_MBUTTONDOWN()等等。本文將利用這些定義好的消息模擬實現(xiàn)一下消息發(fā)送,需要的可以參考一下
    2022-01-01
  • 基于opencv實現(xiàn)視頻中的顏色識別功能

    基于opencv實現(xiàn)視頻中的顏色識別功能

    這篇文章主要介紹了基于opencv實現(xiàn)視頻中的顏色識別功能,文章詳細(xì)介紹了顏色識別的原理及opencv中的顏色模型,基于c++代碼實現(xiàn)顏色識別功能,需要的朋友可以參考下
    2022-07-07
  • C語言中字符串的存儲方法

    C語言中字符串的存儲方法

    這篇文章主要為大家詳細(xì)介紹了C語言中字符串的存儲方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 在C語言中調(diào)用C++做的動態(tài)鏈接庫

    在C語言中調(diào)用C++做的動態(tài)鏈接庫

    如果你有一個c++做的動態(tài)鏈接庫.so文件,而你只有一些相關(guān)類的聲明,那么你如何用c調(diào)用呢,別著急,本文通過一個小小的例子,讓你能夠很爽的搞定.
    2016-05-05

最新評論