国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

【c++】c++初識--基本知識梳理(2)

2019-11-11 04:03:07
字體:
來源:轉載
供稿:網友

5.引用VS指針

(1)作用:引用是給變量起一個別名;

(2)定義引用的一般格式:

         類型 &引用名 = 變量名;

例如:

int a = 1;int &b = a; //b是的別名,因此a和b是同一個單元

(PS:定義引用時一定要初始化,指明引用變量是誰的別名)

在實際應用中,引用一般用作參數傳遞與返回值。

(3)const引用是指向const對象的引用

const int ival = 1024;  //const int& refval = ival; //正確int &ref2 = ival;      //錯誤

(4)函數傳參:按引用傳遞

引用傳遞方式是在函數定義時在形參前面加上引用運算符&;

         例如:voidswap(int &a, int &b);

引用作為參數對形參的任何操作都能改變響應的實參數據,又使函數調用顯得方便、自然。

(5)引用可作為函數的返回值,放在賦值運算符左邊;

#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;}

結果為:num = 7;

 

(6)引用與指針的區別

引用訪問一個變量是直接訪問,而指針是間接訪問;

引用是一個變量的別名,本身不單獨分配自己的內存空間,而指針有自己的內存空間;

引用一經初始化不能再引用其他變量,而指針可以重新指向其他變量。

(盡可能使用引用,不得已時使用指針)

 

6.函數升級

(1)內聯函數的使用

inline int add(int a, int b){   return a + b;}inline int add(int a, int b)

{

   return a + b;

}

宏函數

#define ADD(a, b)  a + b

(2)內聯函數與宏函數的區別

內聯函數調用時,要求實參和形參的類型一致,另外內聯函數會先對實參表達式進行求值,然后傳遞給形參;而宏調用時只用實參簡單地替換形參。

內聯函數是在編譯的時候,在調用的地方將代碼展開,而宏則是在預處理時進行替換的;

         在c++中最好用inline函數替代帶參數的宏。

(3)函數重載(overload)

定義:相同的作用域,如果兩個函數名稱相同,而參數不同,稱為重載(overload)

條件:編譯器通過檢查實際參數的個數、類型和順序確定相應的被調用函數。

name managling(名字改編):c++為了支持重載,會將相同的函數名根據形參的不同而改編成不同的名字加以識別。

實現c與c++混合編程:extern “C”

ifdef __cplusplusextern “C”{#endif……#ifndef __cplusplus}#endif

帶默認形參值的函數:

         函數沒有聲明時,在函數定義中指定形參的默認值;

         函數既有定義又有聲明時,聲明指定后,定義時就不能再指定默認值;

         默認值的定義必須遵守從右到左的順序,如果某個形參沒有默認值,則它左邊的參數就不能有默認值。

         voidfunc(int a, double b = 4.2, int c= 3); //合法         voidfunc(int a = 3, double b, int c = 3);  //不合法

函數調用時,實參與形參按從左到右的順序進行匹配。

 

7.命名空間

(1)c語言 VS c++

c語言中所有的全局標識符共享同一個作用域,標識符之間可能發生沖突

c++中提出了命名空間的概念:

命名空間將全局作用域分成不同的部分;

不同命名空間中的標識符可以同名而不會發生沖突;

命名空間可以互相嵌套;

全局作用域也叫默認命名空間。

(2)如何定義命名空間

c++命名空間的定義:

namespace name{…}

namespace First{   int I = 0;}namespace Second{    int I = 1;    namespaceInternal    {        struct p        {            int x;            int y;        };    }}

(3)c++命名空間的使用

使用整個命名空間:using namespace name;

使用命名空間中的變量:using name::variable;

使用默認命名空間中的變量:::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;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 汨罗市| 通道| 上蔡县| 凉山| 驻马店市| 昭通市| 开远市| 治县。| 融水| 河西区| 灵宝市| 玉山县| 龙岩市| 定日县| 凤翔县| 灵寿县| 阿坝县| 忻城县| 海阳市| 庄浪县| 三门县| 巧家县| 开原市| 新化县| 宕昌县| 施秉县| 石柱| 通许县| 郯城县| 平昌县| 崇左市| 广平县| 镇赉县| 阿拉尔市| 湟中县| 大港区| 吉木萨尔县| 阜平县| 廊坊市| 西畴县| 柳江县|