最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C/C++編程筆記:C++入門知識(shí)丨函數(shù)和函數(shù)模板

2020-07-24 20:43 作者:C語(yǔ)言編程__Plus  | 我要投稿

本篇要學(xué)習(xí)的內(nèi)容和知識(shí)結(jié)構(gòu)概覽


函數(shù)的參數(shù)及其傳遞方式

1. 函數(shù)參數(shù)傳遞方式

傳值:

? ? 傳變量值: 將實(shí)參內(nèi)存中的內(nèi)容拷貝一份給形參, 兩者是不同的兩塊內(nèi)存

? ? 傳地址值: 將實(shí)參所對(duì)應(yīng)的內(nèi)存空間的地址值給形參, 形參是一個(gè)指針, 指向?qū)崊⑺鶎?duì)應(yīng)的內(nèi)存空間

傳引用:

? ? 形參是對(duì)實(shí)參的引用, 形參和實(shí)參是同一塊內(nèi)存空間

2. 對(duì)象作為函數(shù)參數(shù), 也就是傳變量值

將實(shí)參對(duì)象的值傳遞給形參對(duì)象, 形參是實(shí)參的備份, 當(dāng)在函數(shù)中改變形參的值時(shí), 改變的是這個(gè)備份中的值, 不影響原來(lái)的值

像這樣:

3. 對(duì)象指針作為函數(shù)參數(shù), 也就是傳地址值

形參是對(duì)象指針, 實(shí)參是對(duì)象的地址值, 雖然參數(shù)傳遞方式仍然是傳值方式, 因?yàn)樾螀⒑蛯?shí)參的地址值一樣, 所以它們都指向同一塊內(nèi)存, 我們通過(guò)指針更改所指向的內(nèi)存中的內(nèi)容, 所以當(dāng)在函數(shù)中通過(guò)形參改變內(nèi)存中的值時(shí), 改變的就是原來(lái)實(shí)參的值

像這樣:


對(duì)于數(shù)組, 因數(shù)組名就是代表的數(shù)組首地址, 所以數(shù)組也能用傳數(shù)組地址值的方式


4. 引用作為函數(shù)參數(shù), 也就是傳地址(注意: 這里不是地址值)

在函數(shù)調(diào)用時(shí), 實(shí)參對(duì)象名傳給形參對(duì)象名, 形參對(duì)象名就成為實(shí)參對(duì)象名的別名. 實(shí)參對(duì)象和形參對(duì)象代表同一個(gè)對(duì)象, 所以改變形參對(duì)象的值就是改變實(shí)參對(duì)象的值

像這樣:


優(yōu)點(diǎn):?引用對(duì)象不是一個(gè)獨(dú)立的對(duì)象,不單獨(dú)占內(nèi)存單元, 而對(duì)象指針要另外開辟內(nèi)存單元(內(nèi)存中放實(shí)參傳過(guò)來(lái)的地址),所以傳引用比傳指針更好用。

5. 默認(rèn)參數(shù)

不要求程序在調(diào)用時(shí)必須設(shè)定該參數(shù), 而由編譯器在需要時(shí)給該參數(shù)賦默認(rèn)值.?

規(guī)則1:當(dāng)程序需要傳遞特定值時(shí)需要顯式的指明. 默認(rèn)參數(shù)必須在函數(shù)原型中說(shuō)明.

如果函數(shù)在main函數(shù)后面定義, 而在聲明中設(shè)置默認(rèn)參數(shù), 在定義中不需要設(shè)置默認(rèn)參數(shù)

像這樣:


如果函數(shù)在main函數(shù)前面定義, 則在定義中設(shè)置默認(rèn)參數(shù)

像這樣:


規(guī)則2:默認(rèn)參數(shù)可以多于一個(gè),但必須放在參數(shù)序列的后部。

像這樣:

可以有一個(gè)默認(rèn)參數(shù):void PrintValue(int a, int b, int c = 0);

可以是有多個(gè)默認(rèn)參數(shù):void PrintValue(int a, int b = 0, int c = 0);

不可以在中間設(shè)置默認(rèn)參數(shù):void PrintValue(int a, int b = 0, int c);

規(guī)則3:如果一個(gè)默認(rèn)參數(shù)需要指定一個(gè)特定值時(shí),則在此之前的所有參數(shù)都必須賦值


6. 使用const保護(hù)數(shù)據(jù)

用const修飾要傳遞的參數(shù), 該函數(shù)只能使用參數(shù), 而無(wú)權(quán)修改參數(shù), 以提高系統(tǒng)的自身安全.

像這樣:



函數(shù)返回值

C++函數(shù)返回值類型可以是除數(shù)組和函數(shù)以外的任何類型

當(dāng)返回值是指針或引用對(duì)象時(shí), 需要注意函數(shù)返回值所指的對(duì)象必須存在, 因此不能將函數(shù)內(nèi)部的局部對(duì)象作為函數(shù)返回值, 因?yàn)楹瘮?shù)內(nèi), 局部變量或者對(duì)象在函數(shù)運(yùn)行完畢后內(nèi)存就釋放啦

1. 返回引用的函數(shù)

函數(shù)可以返回一個(gè)引用, 目的是為了讓該函數(shù)位于賦值運(yùn)算符的左邊

格式: 數(shù)據(jù)類型 & 函數(shù)名(參數(shù)列表);

像這樣:

2. 返回指針的函數(shù)

返回值是存儲(chǔ)某種數(shù)據(jù)類型數(shù)據(jù)的內(nèi)存地址, 這種函數(shù)稱為指針函數(shù)

格式: 數(shù)據(jù)類型 * 函數(shù)名(參數(shù)列表);

像這樣:


3. 返回對(duì)象的函數(shù)

格式: 數(shù)據(jù)類型 函數(shù)名(參數(shù)列表);

像這樣:


4. 函數(shù)返回值作為函數(shù)參數(shù)

如果函數(shù)返回值作為另一個(gè)函數(shù)的參數(shù), 那么這個(gè)返回值必須與另一個(gè)函數(shù)的參數(shù)類型一致

像這樣:


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

1. 內(nèi)聯(lián)函數(shù)的概念

使用關(guān)鍵字inline聲明的函數(shù)稱為內(nèi)聯(lián)函數(shù), 內(nèi)聯(lián)函數(shù)必須在程序中第一次調(diào)用此函數(shù)的語(yǔ)句出現(xiàn)之前定義, 這樣編譯器才知道內(nèi)聯(lián)函數(shù)的函數(shù)休, 然后進(jìn)行替換

像這樣:


2. 注意

在C++中, 除具有循環(huán)語(yǔ)句, switch語(yǔ)句的函數(shù)不能說(shuō)明為內(nèi)聯(lián)函數(shù)外, 其它函數(shù)都可以說(shuō)明為內(nèi)聯(lián)函數(shù).

3. 作用

使用內(nèi)聯(lián)函數(shù)可以提高程序執(zhí)行速度, 但如果函數(shù)體語(yǔ)句多, 則會(huì)增加程序代碼量.

函數(shù)重載和默認(rèn)參數(shù)

1. 函數(shù)重載

一個(gè)函數(shù)名具有多種功能, 具有多種形態(tài), 稱這種我為多態(tài)性, 一個(gè)名字, 多個(gè)函數(shù)

函數(shù)重載要滿足的條件:

參數(shù)類型不同或者參數(shù)個(gè)數(shù)不同

像這樣:


2. 函數(shù)重載與默認(rèn)參數(shù)

當(dāng)函數(shù)重載與默認(rèn)參數(shù)相結(jié)合時(shí), 能夠有效減少函數(shù)個(gè)數(shù)及形態(tài), 縮減代碼規(guī)模.

這樣我們每種數(shù)據(jù)類型只保留一個(gè)函數(shù)即可完成我們的功能, 直接少了兩個(gè)函數(shù).

像這樣:


如果使用默認(rèn)參數(shù), 就不能對(duì)參數(shù)個(gè)數(shù)少于默認(rèn)個(gè)數(shù)的函數(shù)形態(tài)進(jìn)行重載, 只能對(duì)于多于默認(rèn)參數(shù)個(gè)數(shù)的函數(shù)形態(tài)進(jìn)行重載.

像這樣:


函數(shù)模板

從而上面可以看出, 它們是邏輯功能完全一樣的函數(shù), 所提供的函數(shù)體也一樣, 區(qū)別僅僅是數(shù)據(jù)類型不同, 為了統(tǒng)一的處理它們, 引入了函數(shù)模板.?

現(xiàn)在我們的函數(shù)從4個(gè)縮減成一個(gè), 但是我們的功能沒有減少, 反而增加了. 比如我們可以計(jì)算char, float類型

1. 什么是函數(shù)模板

在程序設(shè)計(jì)時(shí)沒有使用實(shí)際存在的類型, 而是使用虛擬的參數(shù)參數(shù), 故其靈活性得到加強(qiáng).

當(dāng)用實(shí)際的類型來(lái)實(shí)例化這種函數(shù)時(shí), 就好像按照模板來(lái)制造新的函數(shù)一樣, 所以稱為函數(shù)模板

格式:?一般用T來(lái)標(biāo)識(shí)類型參數(shù), 也可以用其它的

Template <class T>?

像這樣:


當(dāng)用用函數(shù)模板與具體的數(shù)據(jù)類型連用時(shí), 就產(chǎn)生了模板函數(shù), 又稱為函數(shù)模板實(shí)例化

2. 函數(shù)模板的參數(shù)

函數(shù)模板名<模板參數(shù)>(參數(shù)列表);

我們可以將參數(shù)列表的數(shù)據(jù)強(qiáng)制轉(zhuǎn)換為指定的數(shù)據(jù)類型

像這樣:int sumValue2 = sumWithValue<int>(3.2, 5.1);

我們將參數(shù)列表里的數(shù)據(jù)強(qiáng)制轉(zhuǎn)換為int類型, 再參與計(jì)算

也可以樣:double sumValue2 = sumWithValue(3.2, (double)5);

我們也可以將參數(shù)列表里的單個(gè)參數(shù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換, 再參與計(jì)算

不過(guò)我們一般不會(huì)加上模板參數(shù).

3. 使用關(guān)鍵字typename

用途就是代替template參數(shù)列表中的關(guān)鍵字class

像這樣

template <typename T>

只是將class替換為typename, 其它一樣使用.

強(qiáng)烈建議大家使用typename, 因?yàn)樗褪菫槟0宸?wù)的, 而class是在typename出現(xiàn)之前使用的, 它還有定義類的作用, 不直觀, 也會(huì)在一些其它地方編譯時(shí)報(bào)錯(cuò).

總結(jié):

可能對(duì)于初學(xué)者來(lái)說(shuō), 函數(shù)有點(diǎn)不是很好理解, 包括我當(dāng)初也是, 不要想得過(guò)于復(fù)雜, 其實(shí)它就是一段有特定功能的代碼, 只不過(guò)我們給這段代碼起了個(gè)名字而已, 這樣就會(huì)提高代碼的可讀性和易維護(hù)性。

自學(xué)C/C++編程難度很大,不妨和一些志同道合的小伙伴一起學(xué)習(xí)成長(zhǎng)!

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來(lái)成長(zhǎng)!
另外,UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~

C/C++編程筆記:C++入門知識(shí)丨函數(shù)和函數(shù)模板的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
华蓥市| 武城县| 苍梧县| 怀化市| 武鸣县| 潼南县| 历史| 邵武市| 安平县| 石狮市| 绥棱县| 军事| 卢龙县| 霍林郭勒市| 分宜县| 廊坊市| 平潭县| 黄骅市| 黄浦区| 托里县| 房山区| 晋州市| 广平县| 安新县| 佛学| 游戏| 万荣县| 汉沽区| 固原市| 蓝田县| 岑溪市| 叙永县| 咸宁市| 军事| 成安县| 沽源县| 林芝县| 保康县| 莫力| 定安县| 乌鲁木齐市|