欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:引用 C++前期概念

柚子快報激活碼778899分享:引用 C++前期概念

http://yzkb.51969.com/

目錄

命名空間

命名空間定義

1. 正常的命名空間定義

2. 命名空間可以嵌套

?3.頭文件中的合并?

命名空間使用

命名空間的使用有三種方式:

1:加命名空間名稱及作用域限定符(::)

2:用using將命名空間中某個成員引入

3:使用using namespace 命名空間名稱 引入

C++輸入&輸出

說明:

std命名空間的使用慣例:

?缺省參數(shù)

缺省參數(shù)分類

1:全缺省參數(shù)

2:半缺省參數(shù)

注意:半缺省參數(shù)必須從右到左依次來給出,不能間隔給,缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn)

?編輯

3. 缺省值必須是常量或者全局變量

函數(shù)重載

1、參數(shù)類型不同

2、參數(shù)個數(shù)不同

3、參數(shù)類型順序不同

?main

引用

引用概念

重:類型& 引用變量名(對象名) = 引用實體;

注意:

引用特性

1. 引用在定義時必須初始化

2. 一個變量可以有多個引用

3. 引用一旦引用一個實體,再不能引用其他實體

常引用

使用場景(比C簡單)

1. 做參數(shù)(交換值)

2. 引用做返回值(不用創(chuàng)建臨時變量)

注意:引用是不可以改變指向的

地址的交換值(指針也可以開別名)

鏈表的雙指針也可以更簡單

總結(jié):

引用的讀寫功能和優(yōu)點

引用和指針的區(qū)別

內(nèi)聯(lián)函數(shù)(短小函數(shù)定義 換用內(nèi)聯(lián)函數(shù))

宏的優(yōu)缺點?

優(yōu)點:

缺點:

auto在for循環(huán)中

空指針

命名空間

在C/C++中,變量、函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存 在于全局作用域中,可能會導(dǎo)致很多沖突。使用命名空間的目的是對標(biāo)識符的名稱進行本地化, 以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題的。

比如在C語言中

C語言沒辦法解決類似這樣的命名沖突問題,所以C++提出了namespace來解決

#include

#include

int rand = 10;

// C語言沒辦法解決類似這樣的命名沖突問題,所以C++提出了namespace來解決

int main()

{

printf("%d\n", rand);

return 0;

}

// 編譯后后報錯:error C2365: “rand”: 重定義;以前的定義是“函數(shù)”

命名空間定義

定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對{ }即可,{ }

中即為命名空間的成員。

1. 正常的命名空間定義

namespace N

{

// 命名空間中可以定義變量/函數(shù)/類型

int rand = 10;

int Add(int left, int right)

{

return left + right;

}

struct Node

{

struct Node* next;

int val;

};

}

2. 命名空間可以嵌套

namespace N1

{

int a;

int b;

int Add(int left, int right)

{

? ? return left + right;

}

namespace N2

{

? ? int c;

? ? int d;

? ? int Sub(int left, int right)

? ? {

? ? ? ? return left - right;

? ? }

}

}

?3.頭文件中的合并?

同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中。一個工程中的test.h和上面test.cpp中兩個N1會被合并成一個.不同的頭文件里定義的命名域,到.cpp里包含上這兩個頭文件,相當(dāng)于合并了,都能訪問到.

注意:一個命名空間就定義了一個新的作用域,命名空間中的所有內(nèi)容都局限于該命名空間中

命名空間使用

比如:(里面printf,會出現(xiàn)//編譯報錯:error C2065: “a”: 未聲明的標(biāo)識符)

namespace N

{

// 命名空間中可以定義變量/函數(shù)/類型

int a = 0;

int b = 1;

int Add(int left, int right)

{

return left + right;

}

struct Node

{

struct Node* next;

int val;

};

}

int main()

{

// 編譯報錯:error C2065: “a”: 未聲明的標(biāo)識符

printf("%d\n", a);

return 0;

}

命名空間的使用有三種方式:

展開命名空間會進去搜索,展開命名空間域就等于暴露到全局

1:加命名空間名稱及作用域限定符(::)

int main()

{

? ?printf("%d\n", N::a);

? ?return 0; ? ?

}

2:用using將命名空間中某個成員引入

using N::b;

int main()

{

? ?printf("%d\n", N::a);

? ?printf("%d\n", b);

? ?return 0; ? ?

}

3:使用using namespace 命名空間名稱 引入

using namespce N;

int main()

{

? ?printf("%d\n", N::a);

? ?printf("%d\n", b);

? ?Add(10, 20);

? ?return 0; ? ?

}

C++輸入&輸出

?std是C++標(biāo)準(zhǔn)庫的命名空間名,C++將標(biāo)準(zhǔn)庫的定義實現(xiàn)都放到這個命名空間中

#include

// std是C++標(biāo)準(zhǔn)庫的命名空間名,C++將標(biāo)準(zhǔn)庫的定義實現(xiàn)都放到這個命名空間中

using namespace std;

int main() {

cout"Hello world!!!"endl;

return 0; }

說明:

1. 使用cout標(biāo)準(zhǔn)輸出對象(控制臺)和cin標(biāo)準(zhǔn)輸入對象(鍵盤)時,必須包含< iostream >頭文件以及按命名空間使用方法使用std。 2. cout和cin是全局的流對象,endl是特殊的C++符號,表示換行輸出,他們都包含在包含< iostream >頭文件中。3. 是流插入運算符,>>是流提取運算符。4. 使用C++輸入輸出更方便,不需要像printf/scanf輸入輸出時那樣,需要手動控制格式。C++的輸入輸出可以自動識別變量類型。5. 實際上cout和cin分別是ostream和istream類型的對象,>>和也涉及運算符重載等知識, 這些知識我們我們后續(xù)才會學(xué)習(xí),所以我們這里只是簡單學(xué)習(xí)他們的使用。后面我們還有有 一個章節(jié)更深入的學(xué)習(xí)IO流用法及原理。 注意:早期標(biāo)準(zhǔn)庫將所有功能在全局域中實現(xiàn),聲明在.h后綴的頭文件中,使用時只需包含對應(yīng) 頭文件即可,后來將其實現(xiàn)在std命名空間下,為了和C頭文件區(qū)分,也為了正確使用命名空間, 規(guī)定C++頭文件不帶.h;舊編譯器(vc 6.0)中還支持格式,后續(xù)編譯器已不支持,因 此推薦使用+std的方式。

#include

using namespace std;

int main()

{

? int a;

? double b;

? char c;

? ?

? // 可以自動識別變量的類型

? cin>>a;

? cin>>b>>c;

? ?

? cout<

? cout<

? return 0;

std命名空間的使用慣例:

std是C++標(biāo)準(zhǔn)庫的命名空間,如何展開std使用更合理呢?

1. 在日常練習(xí)中,建議直接using namespace std即可,這樣就很方便。2. using namespace std展開,標(biāo)準(zhǔn)庫就全部暴露出來了,如果我們定義跟庫重名的類型/對象/函數(shù),就存在沖突問題。該問題在日常練習(xí)中很少出現(xiàn),但是項目開發(fā)中代碼較多、規(guī)模 大,就很容易出現(xiàn)。所以建議在項目開發(fā)中使用,像std::cout這樣使用時指定命名空間 + using std::cout展開常用的庫對象/類型等方式。

?缺省參數(shù)

缺省參數(shù)就是給出的函數(shù)參數(shù)的默認值

在調(diào)用有缺省參數(shù)的函數(shù)時,如果沒有指定實參則采用該默認值,否則使用指定的實參

缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實 參則采用該形參的缺省值,否則使用指定的實參。

?Func(); ????// 沒有傳參時,使用參數(shù)的默認值

?Func(10); ??// 傳參時,使用指定的實參

void Func(int a = 0)

{

cout<

}

int main()

{

Func(); ? ? // 沒有傳參時,使用參數(shù)的默認值

Func(10); ? // 傳參時,使用指定的實參

return 0;

}

缺省參數(shù)分類

1:全缺省參數(shù)

void Func(int a = 10, int b = 20, int c = 30)

{

? ? cout<<"a = "<

? ? cout<<"b = "<

? ? cout<<"c = "<

}

2:半缺省參數(shù)

void Func(int a, int b = 10, int c = 20)

{

? ? cout<<"a = "<

? ? cout<<"b = "<

? ? cout<<"c = "<

}

注意:半缺省參數(shù)必須從右到左依次來給出,不能間隔給,缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn)

3. 缺省值必須是常量或者全局變量

函數(shù)重載

參數(shù)不同包含類型不同,順序不同,類型的順序不同和個數(shù)不同

重載函數(shù)必須參數(shù)列表有所不同(包括參數(shù)類型和參數(shù)個數(shù))

重載函數(shù)不依靠返回值來區(qū)分,所以返回值可以相同

函數(shù)重載:是函數(shù)的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數(shù),這 些同名函數(shù)的形參列表(參數(shù)個數(shù) 或 類型 或 類型順序)不同,常用來處理實現(xiàn)功能類似數(shù)據(jù)類型 不同的問題。

1、參數(shù)類型不同

int Add(int left, int right)

{

cout << "int Add(int left, int right)" << endl;

return left + right;

}

double Add(double left, double right)

{

cout << "double Add(double left, double right)" << endl;

return left + right;

}

2、參數(shù)個數(shù)不同

void f()

{

cout << "f()" << endl;

}

void f(int a)

{

cout << "f(int a)" << endl;

}

3、參數(shù)類型順序不同

void f(int a, char b)

{

cout << "f(int a,char b)" << endl;

}

void f(char b, int a)

{

cout << "f(char b, int a)" << endl;

}

?main

int main()

{

Add(10, 20);

Add(10.1, 20.2);

f();

f(10);

f(10, 'a');

f('a', 10);

return 0;

}

引用

引用概念

引用不是新定義一個變量,而是給已存在變量取了一個別名,編譯器不會為引用變量開辟內(nèi)存空 間,它和它引用的變量共用同一塊內(nèi)存空間。

重:類型& 引用變量名(對象名) = 引用實體;

void TestRef()

{

? ?int a = 10;

? ?int& ra = a;//<====定義引用類型

? ?printf("%p\n", &a);

? ?printf("%p\n", &ra);

}

注意:

引用類型必須和引用實體是同種類型的

引用特性

1. 引用在定義時必須初始化

2. 一個變量可以有多個引用

3. 引用一旦引用一個實體,再不能引用其他實體

void TestRef()

{

? int a = 10;

? // int& ra; ? // 該條語句編譯時會出錯

? int& ra = a;

? int& rra = a;

? printf("%p %p %p\n", &a, &ra, &rra); ?

}

常引用

void TestConstRef()

{

? ?const int a = 10;

? ?//int& ra = a; ? // 該語句編譯時會出錯,a為常量

? ?const int& ra = a;

? ?// int& b = 10; // 該語句編譯時會出錯,b為常量

? ?const int& b = 10;

? ?double d = 12.34;

? ?//int& rd = d; // 該語句編譯時會出錯,類型不同

? ?const int& rd = d;

}

使用場景(比C簡單)

1. 做參數(shù)(交換值)

void Swap(int& left, int& right)

{

? int temp = left;

? left = right;

? right = temp;

}

2. 引用做返回值(不用創(chuàng)建臨時變量)

傳值返回 ,返回的是他的拷貝,所以要調(diào)用一次拷貝構(gòu)造

傳引用返回,返回的是他的別名

減少了拷貝,提高了效率

靜態(tài)的沒問題去掉static就有問題了,n在靜態(tài)棧,不在臨時的count里

int& Count()

{

? static int n = 0;//靜態(tài)的沒問題去掉static就有問題了

? n++;

? // ...

? return n;返回的時n的別名(引用)

}

//add1對

int& add1()

{

static int x = 3;

return x;

}

//add2是不對的,

int& add2()

{

int x = 3;

return x;

}

注意:引用是不可以改變指向的

是賦值

并且abc的值都被改了

常引用

b的改變會影響a,是所以不行

引用的過程中,權(quán)限不能被放大。

const int a=0;

int&b=a;

const int c=0;

int d=c;

類型相同不用創(chuàng)建臨時變量、

類型不同,需要創(chuàng)建臨時變量,同時臨時變量具有常性

類型轉(zhuǎn)換/強制類型轉(zhuǎn)換就要創(chuàng)建臨時變量臨時變量具有常性

地址的交換值(指針也可以開別名)

用C需要二級指針,但用引用就可以不用二級

void swap(int*& a,int*& b)

{

int*t=a;

a=b;

b=t;

}

int main()

{

int x=0;int y=1;

int*px=&x;

int*py=&y;

swap(px,py);

}

鏈表的雙指針也可以更簡單

總結(jié):

1、基本任何場景都可以引用傳參 2、謹(jǐn)慎用引用做返回值。出了函數(shù)作用域,對象不在了,就不能用引用返回,還在就可以用引用返回

引用的讀寫功能和優(yōu)點

查找和修改

改進?

引用和指針的區(qū)別

引用和指針的不同點:

1. 引用概念上定義一個變量的別名,指針存儲一個變量地址。

2. 引用在定義時必須初始化,指針沒有要求

3. 引用在初始化時引用一個實體后,就不能再引用其他實體,而指針可以在任何時候指向任何 一個同類型實體

4. 沒有NULL引用,但有NULL指針

5. 在sizeof中含義不同:引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32

位平臺下占4個字節(jié))

6. 引用自加即引用的實體增加1,指針自加即指針向后偏移一個類型的大小

7. 有多級指針,但是沒有多級引用

8. 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理

9. 引用比指針使用起來相對更安全

10.引用一旦定義時初始化指定,就不能再修改,指針可以改變指向

11.引用表面好像是傳值,其本質(zhì)也是傳地址,只是這個工作有編譯器來做

12.指針需要開辟空間,引用不需要開辟空間

13.指針是間接操作對象,引用時對象的別名,對別名的操作就是對真實對象的直接操作

內(nèi)聯(lián)函數(shù)(短小函數(shù)定義 換用內(nèi)聯(lián)函數(shù))

定義和聲明要一起,inline函數(shù)不支持聲明和定義分離開

1. inline是一種以空間換時間的做法,如果編譯器將函數(shù)當(dāng)成內(nèi)聯(lián)函數(shù)處理,在編譯階段,會 用函數(shù)體替換函數(shù)調(diào)用,缺陷:可能會使目標(biāo)文件變大,優(yōu)勢:少了調(diào)用開銷,提高程序運 行效率。

2. inline對于編譯器而言只是一個建議,不同編譯器關(guān)于inline實現(xiàn)機制可能不同,一般建議:將函數(shù)規(guī)模較小(即函數(shù)不是很長,具體沒有準(zhǔn)確的說法,取決于編譯器內(nèi)部實現(xiàn))、不是遞歸、且頻繁調(diào)用的函數(shù)采用inline修飾,否則編譯器會忽略inline特性。

宏的優(yōu)缺點?

優(yōu)點:

1.增強代碼的復(fù)用性。

2.提高性能。

缺點:

1.不方便調(diào)試宏。(因為預(yù)編譯階段進行了替換)

2.導(dǎo)致代碼可讀性差,可維護性差,容易誤用。

3.沒有類型安全的檢查 。

C++有哪些技術(shù)替代宏?

1. 常量定義 換用const enum

2. 短小函數(shù)定義 換用內(nèi)聯(lián)函數(shù)

auto在for循環(huán)中

使用auto定義變量時必須對其進行初始化,在編譯階段編譯器需要根據(jù)初始化表達式來推導(dǎo)auto

的實際類型。因此auto并非是一種“類型”的聲明,而是一個類型聲明時的“占位符”,編譯器在編 譯期會將auto替換為變量實際的類型。

auto與指針和引用結(jié)合起來使用 用auto聲明指針類型時,用auto和auto*沒有任何區(qū)別,但用auto聲明引用類型時則必須 加&

適用于數(shù)組

范圍for

依次取數(shù)組中數(shù)據(jù)賦值給x

x只是個符號,符號隨便起

空指針

C++中,NULL相當(dāng)于0,要用nullptr了

柚子快報激活碼778899分享:引用 C++前期概念

http://yzkb.51969.com/

好文鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19580114.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄