5.引用VS指針
(1)作用:引用是給變量起一個(gè)別名;
(2)定義引用的一般格式:
類型 &引用名 = 變量名;
例如:
int a = 1;int &b = a; //b是的別名,因此a和b是同一個(gè)單元(PS:定義引用時(shí)一定要初始化,指明引用變量是誰(shuí)的別名)
在實(shí)際應(yīng)用中,引用一般用作參數(shù)傳遞與返回值。
(3)const引用是指向const對(duì)象的引用
const int ival = 1024; //const int& refval = ival; //正確int &ref2 = ival; //錯(cuò)誤(4)函數(shù)傳參:按引用傳遞
引用傳遞方式是在函數(shù)定義時(shí)在形參前面加上引用運(yùn)算符&;
例如:voidswap(int &a, int &b);
引用作為參數(shù)對(duì)形參的任何操作都能改變響應(yīng)的實(shí)參數(shù)據(jù),又使函數(shù)調(diào)用顯得方便、自然。
(5)引用可作為函數(shù)的返回值,放在賦值運(yùn)算符左邊;
#include<iostream> using namespace std; int& func(int &num){ return num;} int main(){ int num=1; func(num)=7; cout<<"num = "<<num<<endl; return 0;}結(jié)果為:num = 7;
(6)引用與指針的區(qū)別
引用訪問(wèn)一個(gè)變量是直接訪問(wèn),而指針是間接訪問(wèn);
引用是一個(gè)變量的別名,本身不單獨(dú)分配自己的內(nèi)存空間,而指針有自己的內(nèi)存空間;
引用一經(jīng)初始化不能再引用其他變量,而指針可以重新指向其他變量。
(盡可能使用引用,不得已時(shí)使用指針)
6.函數(shù)升級(jí)
(1)內(nèi)聯(lián)函數(shù)的使用
inline int add(int a, int b){ return a + b;}inline int add(int a, int b){
return a + b;
}
宏函數(shù)
#define ADD(a, b) a + b(2)內(nèi)聯(lián)函數(shù)與宏函數(shù)的區(qū)別
內(nèi)聯(lián)函數(shù)調(diào)用時(shí),要求實(shí)參和形參的類型一致,另外內(nèi)聯(lián)函數(shù)會(huì)先對(duì)實(shí)參表達(dá)式進(jìn)行求值,然后傳遞給形參;而宏調(diào)用時(shí)只用實(shí)參簡(jiǎn)單地替換形參。
內(nèi)聯(lián)函數(shù)是在編譯的時(shí)候,在調(diào)用的地方將代碼展開,而宏則是在預(yù)處理時(shí)進(jìn)行替換的;
在c++中最好用inline函數(shù)替代帶參數(shù)的宏。
(3)函數(shù)重載(overload)
定義:相同的作用域,如果兩個(gè)函數(shù)名稱相同,而參數(shù)不同,稱為重載(overload)
條件:編譯器通過(guò)檢查實(shí)際參數(shù)的個(gè)數(shù)、類型和順序確定相應(yīng)的被調(diào)用函數(shù)。
name managling(名字改編):c++為了支持重載,會(huì)將相同的函數(shù)名根據(jù)形參的不同而改編成不同的名字加以識(shí)別。
實(shí)現(xiàn)c與c++混合編程:extern “C”
ifdef __cplusplusextern “C”{#endif……#ifndef __cplusplus}#endif帶默認(rèn)形參值的函數(shù):
函數(shù)沒(méi)有聲明時(shí),在函數(shù)定義中指定形參的默認(rèn)值;
函數(shù)既有定義又有聲明時(shí),聲明指定后,定義時(shí)就不能再指定默認(rèn)值;
默認(rèn)值的定義必須遵守從右到左的順序,如果某個(gè)形參沒(méi)有默認(rèn)值,則它左邊的參數(shù)就不能有默認(rèn)值。
voidfunc(int a, double b = 4.2, int c= 3); //合法 voidfunc(int a = 3, double b, int c = 3); //不合法函數(shù)調(diào)用時(shí),實(shí)參與形參按從左到右的順序進(jìn)行匹配。
7.命名空間
(1)c語(yǔ)言 VS c++
c語(yǔ)言中所有的全局標(biāo)識(shí)符共享同一個(gè)作用域,標(biāo)識(shí)符之間可能發(fā)生沖突
c++中提出了命名空間的概念:
命名空間將全局作用域分成不同的部分;
不同命名空間中的標(biāo)識(shí)符可以同名而不會(huì)發(fā)生沖突;
命名空間可以互相嵌套;
全局作用域也叫默認(rèn)命名空間。
(2)如何定義命名空間
c++命名空間的定義:
namespace name{…}
namespace First{ int I = 0;}namespace Second{ int I = 1; namespaceInternal { struct p { int x; int y; }; }}(3)c++命名空間的使用
使用整個(gè)命名空間:using namespace name;
使用命名空間中的變量:using name::variable;
使用默認(rèn)命名空間中的變量:::variable
示例:
#include<iostream> usingnamespacestd; namespaceFirst{ inti=1;}namespaceSecond{ inti=2; namespaceInternal { structmystruct { intx; inty; }; }} int main(){ usingnamespaceFirst; usingSecond::Internal::mystruct; cout<<"i = "<<i<<endl; cout<<"second i = "<<Second::i<<endl; mystructnode={3,4}; cout<<"node.x = "<<node.x<<endl; cout<<"node.y = "<<node.y<<endl; return0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注