C++中的引用與高級函數(shù)詳解
引用
定義:給變量起別名。
語法:數(shù)據(jù)類型&別名=原名。
int a=10; int &b=a; //(此時(shí)的a和b都指向了同一塊空間,都可對里面的元素進(jìn)行修改)
對這兩個(gè)變量名字任意一個(gè)進(jìn)行修改,兩變量的結(jié)果都會發(fā)生變化
引用注意事項(xiàng)
1.引用必須初始化
int a=10; int &b=a;(必須等于一個(gè)變量)
2.引用初始化后,不可以改變(永遠(yuǎn)指向最初初始化指向的空間),初始化后只能進(jìn)行賦值操作
int a=10; int c=20; int &b=a; b=c;(將c賦值給b后,b和a的值都為20,但b指向的空間依然和a一樣,不發(fā)生變化)
引用的做函數(shù)參數(shù)
作用:函數(shù)傳參時(shí),可以利用引用的技術(shù)讓形參修飾實(shí)參
優(yōu)點(diǎn):可以簡化指針直接修改實(shí)參
/1.引用做函數(shù)的參數(shù) void sweap(int& a, int& b)//可以當(dāng)作函數(shù)傳參的,傳進(jìn)去的是自己本身,在函數(shù)中對其進(jìn)行修改后變量本身也會被修改(類似于地址傳參) { int temp = a; a = b; b = temp; }
引用做函數(shù)的返回值:
int& Add(int a, int b) { static int c = a + b;//靜態(tài)變量,存放在全局區(qū)域 return c; }
常量引用
void print(const int& val) {//為了防止引用傳參的時(shí)候變量在函數(shù)中被修改而不影響自己本身,可以加入const。這樣變量就不會被修改 val=20 cout << "val=" << val << endl; }
引用的本質(zhì):
在c++內(nèi)部實(shí)現(xiàn)一個(gè)指針常量。
int a=10; int &b=a;//int *const b=&a; 若直接賦值給一個(gè)常數(shù) const int &b=10;//int temp=10;const int &b=temp; 加入const后變?yōu)橹蛔x,不可修改。
函數(shù)高級
1.函數(shù)的默認(rèn)參數(shù)
在c++中,函數(shù)的形參列表中的形參可以有默認(rèn)參數(shù)
語法:返回值類型 函數(shù)名(參數(shù)=默認(rèn)值){}
int func(int a, int b = 20) { return a + b; }
注意事項(xiàng):
注意: 1.如果某個(gè)位置已經(jīng)有了默認(rèn)參數(shù),那么從這個(gè)位置開始往后,從左到右都必須有默認(rèn)值 eg: b有了默認(rèn)值,后面的所以形參都要有默認(rèn)值 int test1(int a, int b = 20, int c); 2.如果函數(shù)聲明有默認(rèn)參數(shù),函數(shù)實(shí)現(xiàn)就不能有默認(rèn)參數(shù) 聲明和實(shí)現(xiàn)只能有一個(gè)有默認(rèn)參數(shù) int test2(int a = 20, int b = 239); int test2(int a, int b) { } int fun(int a=10,int b=20) { retutn a+b; } int a = 10, b = 29; 如果自己傳入數(shù)據(jù)就用自己的數(shù)據(jù),如果沒有那么用默認(rèn)數(shù)據(jù)。 //cout << "a+b=" << func(a,20) << endl;//結(jié)果=39 //cout << "a+b=" << func(a) << endl;//結(jié)果=30 return 0;
2.函數(shù)占位參數(shù)
c++中函數(shù)形參列表里面可以有占位參數(shù),且傳參的時(shí)候也當(dāng)作一個(gè)形參,必選滿足其形參數(shù)量 占位參數(shù)中可以有默認(rèn)值 void test3(int a, int =20) { }
3.函數(shù)重載:
作用函數(shù)名可以相同,提高復(fù)用性
條件:
同一作用域下
函數(shù)名稱相同
函數(shù)參數(shù)類型行不通,或者參數(shù)個(gè)數(shù)不同,或者順序不同
//void func(double a, int b); //void func(int a, double); //函數(shù)重載的注意事項(xiàng): //a.引用作為函數(shù)的重載的條件 void func(int &a);//int &a=10; 不合法 //調(diào)用:func(a); void func(const int& a);//const int &a=10; 合法 //調(diào)用:func(10); //b.函數(shù)重載碰到默認(rèn)參數(shù) void func2(int a); void func2(int a, int b = 10); //func2(10)//1,2都可以去調(diào)用,所以這樣調(diào)用行不通。 //當(dāng)函數(shù)重載碰到默認(rèn)參數(shù)的時(shí)候會出現(xiàn)二義性。 //func2(10,20)//這種情況下可以行得通。
到此這篇關(guān)于C++中的引用與高級函數(shù)詳解的文章就介紹到這了,更多相關(guān)C++高級函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++中引用、內(nèi)聯(lián)函數(shù)、auto關(guān)鍵字和范圍for循環(huán)詳解
- C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解
- C++示例分析內(nèi)聯(lián)函數(shù)與引用變量及函數(shù)重載的使用
- C++右值引用與move和forward函數(shù)的使用詳解
- 聊聊C++中右值引用和移動(dòng)構(gòu)造函數(shù)的使用
- 舉例剖析C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用
- 詳解C++編程中向函數(shù)傳遞引用參數(shù)的用法
相關(guān)文章
C++實(shí)現(xiàn)分?jǐn)?shù)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)分?jǐn)?shù)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06C語言中調(diào)用Swift函數(shù)實(shí)例詳解
這篇文章主要介紹了C語言中調(diào)用Swift函數(shù)實(shí)例詳解的相關(guān)資料,實(shí)現(xiàn)該功能可以通過定義全局的指向Blocks的對象指針來實(shí)現(xiàn),需要的朋友可以參考下2017-07-07C++設(shè)計(jì)模式之策略模式(Strategy)
這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之策略模式Strategy ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Qt中QStackedWidget控件的實(shí)現(xiàn)
QStackedWidget是Qt框架中一個(gè)非常有用的控件,它允許你堆疊多個(gè)窗口部件,本文主要介紹了Qt中QStackedWidget控件的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04Qt圖形圖像開發(fā)之QT滾動(dòng)區(qū)控件(滾動(dòng)條)QScrollArea的詳細(xì)方法用法圖解與實(shí)例
這篇文章主要介紹了Qt圖形圖像開發(fā),QT滾動(dòng)區(qū)控件(滾動(dòng)條)QScrollArea的詳細(xì)方法用法圖解與實(shí)例,需要的朋友可以參考下2020-03-03