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

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:開發(fā)語言 C++入門

柚子快報(bào)激活碼778899分享:開發(fā)語言 C++入門

http://yzkb.51969.com/

一.命名空間

在c語言中,如果我們同時(shí)定義一個(gè)全局變量和一個(gè)局部變量,會(huì)優(yōu)先使用局部變量,這樣的話在c語言中我們是無法直接訪問全局變量a的。

因此,c++定義了關(guān)鍵字namespace和操作符::來解決這個(gè)問題。

一、namespace 與 ::

?1,定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對(duì){}即可,{}中即為命名空間的成員。

#include

int a = 1;

namespace X

{

int a = 2;

}

int main()

{

printf("%d", ::a);

return 0;

}

2,::是一個(gè)雙目操作符,前面代表要訪問的域,后面是要訪問的變量。若第一個(gè):后面沒有內(nèi)容即表示訪問全局變量。 因此以上代碼輸出結(jié)果為1。

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

1,加命名空間名稱及作用域限定符

int main()

{

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

? ?return 0; ? ?

}

2.使用using將命名空間中某個(gè)成員引入

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; ? ?

}

四、命名域特征

1.命名域可以進(jìn)行嵌套

2.同一個(gè)工程中允許存在多個(gè)相同名稱的命名空間,編譯器最后會(huì)合成同一個(gè)命名空間中。

二.C++輸出和輸入

1. 使用cout標(biāo)準(zhǔn)輸出對(duì)象(控制臺(tái))和cin標(biāo)準(zhǔn)輸入對(duì)象(鍵盤)時(shí),必須包含< iostream >頭文件 以及按命名空間使用方法使用std。

2. cout和cin是全局的流對(duì)象,endl是特殊的C++符號(hào),表示換行輸出,他們都包含在包含頭文件中。

3. <<是流插入運(yùn)算符,>>是流提取運(yùn)算符。

4. 使用C++輸入輸出更方便,不需要像printf/scanf輸入輸出時(shí)那樣,需要手動(dòng)控制格式。 C++的輸入輸出可以自動(dòng)識(shí)別變量類型。

#include

using namespace std;

int main()

{

? int a;

? double b;

? char c;

? ?

? // 可以自動(dòng)識(shí)別變量的類型

? cin>>a;

? cin>>b>>c;

? ?

? cout<

? cout<

? return 0;

}

三.缺省參數(shù)

一,概念

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

void Func(int a = 0)

{

cout<

}

int main()

{

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

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

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 = "<

}

三、注意

1. 半缺省參數(shù)必須從右往左依次來給出,不能間隔著給

2. 缺省參數(shù)不能在函數(shù)聲明和定義中同時(shí)出現(xiàn)(只給聲明)

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

4. C語言不支持(編譯器不支持)

四.函數(shù)重載

一,概念

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

參數(shù)類型不同

參數(shù)個(gè)數(shù)不同

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

二,C++支持函數(shù)重載的原理--名字修飾

過程 作用 產(chǎn)生文件stack.h stack.cpp test.cpp 預(yù)處理 展開頭文件 宏替換 條件編譯 去掉注釋 ?stack.i test.i 編譯 檢查語法 ->生成匯編代碼 stack.s test.s 匯編 把匯編代碼轉(zhuǎn)成二進(jìn)制機(jī)器碼 stack.o test.o 鏈接 將文件合并到一起

編譯后鏈接前,test.o的目標(biāo)文件中沒有函數(shù)地址,因?yàn)楹瘮?shù)是在stack.cpp中定義的,所以函數(shù)的地址在stack.o中。鏈接階段鏈,接器看到test.o調(diào)用函數(shù),但是沒有函數(shù)的地址,就會(huì)到stack.o的符號(hào)表中找函數(shù)的地址,然后鏈接到一起。

那么鏈接時(shí),面對(duì)函數(shù),鏈接器會(huì)使用哪個(gè)名字去找呢?

這里每個(gè)編譯器都有自己的函數(shù)名修飾規(guī)則。

?通過這里我們就理解了C語言沒辦法支持重載,因?yàn)橥瘮?shù)沒辦法區(qū)分。而C++是通過函數(shù)修飾規(guī)則來區(qū)分,只要參數(shù)不同,修飾出來的名字就不一樣,就支持了重載。

五.引用

一,引用概念

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

void TestRef()

{

? ?int a = 10;

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

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

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

}

注意:引用類型必須和引用實(shí)體是同種類型的

二,引用特性

1. 引用在定義時(shí)必須初始化 2. 一個(gè)變量可以有多個(gè)引用 3. 引用一旦引用一個(gè)實(shí)體,再不能引用其他實(shí)體

void TestRef()

{

? int a = 10;

? // int& ra; ? // 該條語句編譯時(shí)會(huì)出錯(cuò)

? int& ra = a;

? int& rra = a;

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

}

三,常引用

void TestConstRef()

{

? ?const int a = 10;

? ?//int& ra = a; ? // 該語句編譯時(shí)會(huì)出錯(cuò),a為常量 ? ?const int& ra = a;

? ?// int& b = 10; // 該語句編譯時(shí)會(huì)出錯(cuò),b為常量 ? ?const int& b = 10;

? ?double d = 12.34;

? ?//int& rd = d; // 該語句編譯時(shí)會(huì)出錯(cuò),類型不同 ? ?const int& rd = d;

}

四,使用場景

1. 做參數(shù)

void Swap(int& left, int& right)

{

? int temp = left;

? left = right;

? right = temp;

}

2. 做返回值

int& Count()

{

? static int n = 0;

? n++;

? // ...

? return n;

}

五,傳值、傳引用效率比較

?以值作為參數(shù)或者返回值類型,在傳參和返回期間,函數(shù)不會(huì)直接傳遞實(shí)參或者將變量本身直接返回,而是傳遞實(shí)參或者返回變量的一份臨時(shí)的拷貝,因此用值作為參數(shù)或者返回值類型,效率是非常低下的,尤其是當(dāng)參數(shù)或者返回值類型非常大時(shí),效率就更低。

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

在語法概念上引用就是一個(gè)別名,沒有獨(dú)立空間,和其引用實(shí)體共用同一塊空間。

在底層實(shí)現(xiàn)上實(shí)際是有空間的,因?yàn)橐檬前凑罩羔樂绞絹韺?shí)現(xiàn)的。

引用和指針的不同點(diǎn): 1. 引用概念上定義一個(gè)變量的別名,指針存儲(chǔ)一個(gè)變量地址。 2. 引用在定義時(shí)必須初始化,指針沒有要求 3. 引用在初始化時(shí)引用一個(gè)實(shí)體后,就不能再引用其他實(shí)體,而指針可以在任何時(shí)候指向任何 一個(gè)同類型實(shí)體 4. 沒有NULL引用,但有NULL指針 5. 在sizeof中含義不同:引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個(gè)數(shù)(32 位平臺(tái)下占4個(gè)字節(jié)) 6. 引用自加即引用的實(shí)體增加1,指針自加即指針向后偏移一個(gè)類型的大小 7. 有多級(jí)指針,但是沒有多級(jí)引用 8. 訪問實(shí)體方式不同,指針需要顯式解引用,引用編譯器自己處理 9. 引用比指針使用起來相對(duì)更安全

六.內(nèi)聯(lián)函數(shù)

一,概念

以inline修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時(shí)C++編譯器會(huì)在調(diào)用內(nèi)聯(lián)函數(shù)的地方展開,沒有函數(shù)調(diào)用建立棧幀的開銷,內(nèi)聯(lián)函數(shù)提升程序運(yùn)行的效率。

二,特性

1. inline是一種以空間換時(shí)間的做法,如果編譯器將函數(shù)當(dāng)成內(nèi)聯(lián)函數(shù)處理,在編譯階段,會(huì) 用函數(shù)體替換函數(shù)調(diào)用,缺陷:可能會(huì)使目標(biāo)文件變大,優(yōu)勢:少了調(diào)用開銷,提高程序運(yùn)行效率。 2. inline對(duì)于編譯器而言只是一個(gè)建議,不同編譯器關(guān)于inline實(shí)現(xiàn)機(jī)制可能不同,一般建 議:將函數(shù)規(guī)模較小(即函數(shù)不是很長,具體沒有準(zhǔn)確的說法,取決于編譯器內(nèi)部實(shí)現(xiàn))、不是遞歸、且頻繁調(diào)用的函數(shù)采用inline修飾,否則編譯器會(huì)忽略inline特性。

3. inline不建議聲明和定義分離,分離會(huì)導(dǎo)致鏈接錯(cuò)誤。因?yàn)閕nline被展開,就沒有函數(shù)地址 了,鏈接就會(huì)找不到。

柚子快報(bào)激活碼778899分享:開發(fā)語言 C++入門

http://yzkb.51969.com/

好文推薦

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

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

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

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

發(fā)布評(píng)論

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

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄