国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【C++初階】 關(guān)鍵字,命名空間,缺省參數(shù),IO和函數(shù)重載

winterdawn / 3924人閱讀

摘要:事實(shí)上語(yǔ)言當(dāng)中有的內(nèi)容,比如函數(shù)循環(huán)結(jié)構(gòu)體宏等等內(nèi)容,也都有,所以大家千萬(wàn)不要認(rèn)為語(yǔ)言白學(xué)了哈因?yàn)橹耙呀?jīng)完整更新過(guò)語(yǔ)言的博客有需要可以往前翻,所以這里直接介紹相對(duì)語(yǔ)言當(dāng)中新增的內(nèi)容,而本章引入的內(nèi)容是的關(guān)鍵字命名空間缺省參數(shù)函數(shù)重載。

前言:首先感謝每一位老粉絲們的陪伴,從一開始的C語(yǔ)言初階到C語(yǔ)言進(jìn)階,作者用了三個(gè)月的時(shí)間才學(xué)完并更新完對(duì)應(yīng)的博客,后邊數(shù)據(jù)結(jié)構(gòu)初階部分(數(shù)據(jù)結(jié)構(gòu)進(jìn)階的內(nèi)容會(huì)混在C++當(dāng)中)又花了大概倆個(gè)多月的時(shí)間,接下來(lái)就開啟新篇章啦,進(jìn)入C++部分!

開篇之前先膜下 本賈尼·斯特勞斯特盧普 老爺子,希望大家C++學(xué)得都順利哈!!!

其實(shí)為什么一開始要先學(xué)習(xí)C語(yǔ)言,而不是一下子直接上手C++呢?因?yàn)樽髡弑救耸欠强瓢嗟膶W(xué)生,主要還是考慮到基礎(chǔ)必須打牢的原因!!!在確定轉(zhuǎn)碼的學(xué)習(xí)路線過(guò)程當(dāng)中作者本人也要到了不少985科班同學(xué)們的培養(yǎng)方案,與一些前輩們交流之后認(rèn)為C語(yǔ)言的學(xué)習(xí)對(duì)于后續(xù)計(jì)算機(jī)知識(shí)的學(xué)習(xí)會(huì)大有裨益。

事實(shí)上C語(yǔ)言當(dāng)中有的內(nèi)容,比如函數(shù)、循環(huán)、結(jié)構(gòu)體、宏等等內(nèi)容,C++也都有,所以大家千萬(wàn)不要認(rèn)為C語(yǔ)言白學(xué)了哈!因?yàn)橹耙呀?jīng)完整更新過(guò)C語(yǔ)言的博客(有需要可以往前翻),所以C++這里直接介紹C++相對(duì)C語(yǔ)言當(dāng)中新增的內(nèi)容,而本章引入的內(nèi)容是C++的關(guān)鍵字、命名空間、缺省參數(shù)、IO、函數(shù)重載



1.關(guān)鍵字

我們?cè)贑語(yǔ)言中學(xué)習(xí)了32個(gè)關(guān)鍵字,既然C++是對(duì)C語(yǔ)言內(nèi)容的補(bǔ)充和添加,那么C++中也含有關(guān)鍵字,其中就除了C語(yǔ)言中的32個(gè)關(guān)鍵字,C++又新增了31個(gè)關(guān)鍵字,一共63個(gè)關(guān)鍵字。


2.命名空間

相信這倆行代碼大部分讀者都見過(guò),但你知道第二行代碼using namespace std;具體是干嘛的嗎?

#include using namespace std;

這就要先講講為什么會(huì)有命名空間了?

在C語(yǔ)言中,一個(gè)工程的建立我們可能需要?jiǎng)?chuàng)建大量的變量、函數(shù)、類等,而這些內(nèi)容都將存在于全局域中,如果在相同作用域下聲明相同名字變量,函數(shù)等編譯器將會(huì)報(bào)錯(cuò),于是為了解決這種情況,C++提出了命名空間的概念。

那為什么會(huì)有在相同作用域下聲明相同名字變量,函數(shù)的需求呢?

這是因?yàn)楫?dāng)所有人都在為同一個(gè)項(xiàng)目工作時(shí),一個(gè)工程項(xiàng)目的實(shí)現(xiàn)往往需要拆解成很多塊,具體給到不同的程序員手里,每個(gè)人負(fù)責(zé)的板塊不一樣,這樣就會(huì)出現(xiàn)一個(gè)問(wèn)題。比如程序員A和程序員B都要實(shí)現(xiàn)一個(gè)加法函數(shù)(這個(gè)加法函數(shù)具體功能可能不同),程序員A和程序員B可能都會(huì)想到為自己的加法函數(shù)起名為ADD,就會(huì)導(dǎo)致函數(shù)重名,編譯器報(bào)錯(cuò),所以需要命名空間。


2.1 命名空間的定義

定義 命名空間時(shí),我們現(xiàn)在知道需要namespace這個(gè)關(guān)鍵字,后面更加命名空間的名字,然后像創(chuàng)建一個(gè)函數(shù)一樣,用{}進(jìn)行內(nèi)容的包裹,而這其中的內(nèi)容就是命名空間的成員。一個(gè)命名空間就相當(dāng)于定義了一個(gè)新的作用域,命名空間中的所有內(nèi)容都局限于命名空間中。

代碼1

定義個(gè)叫“l(fā)inmanman”的命名空間中,在這個(gè)空間中定義變量和函數(shù)

namespace linmanman{	int a = 10;	int b = 20;	int Add(int x, int y)	{		return x + y;	}}

代碼2

命名空間的嵌套定義

namespace linmanman{	int a = 10;	int b = 20;    namespace lin {	 int x = 10;	 int y = 20;	 int Add(int x, int y)	 {	 	return x + y;	 } }}

代碼3

命名空間可合并,當(dāng)有多個(gè)一樣的命名空間時(shí),編譯器會(huì)自動(dòng)將他們整合在一起。

namespace linmanman{	int a = 10;	int b = 20;	int Add(int x, int y)	{		return x + y;	}}namespace linmanman{	int x = 10;	int y = 20;}

2.2 命名空間的使用方法

2.2.1 全部直接展開到全局

namespace lin{	int a = 20;	int b = 10;}using namespace lin;//關(guān)鍵字using的使用將命名空間展開到全局int main(){	printf("a的值為:%d/n", a);	return 0;}

2.2.2 使用命名空間名稱+作用域限定符::

命名空間名::成員名

namespace lin{	int a = 20;	int b = 10;}int main(){	printf("a的值為:%d/n", lin::a);    //這里我們可以理解為作用域限定符"::"的使用,讓我們?cè)趌in這個(gè)命名空間中找到了a這個(gè)變量	return 0;}

2.2.3 使用using將命名空間中常用的成員引入

namespace lin{	int a = 20;	int b = 10;}using lin::a;//我們可以理解為我們將lin這個(gè)命名空間中變量a釋放,將其展開到全局int main(){	printf("a的值為:%d/n", a);	return 0;}

3.輸入&輸出

同樣是“hellow world”,讓我們看看在C++這門編譯語(yǔ)言中,我們應(yīng)該如何實(shí)現(xiàn)這句代碼呢?在C++中的實(shí)現(xiàn)和C語(yǔ)言有什么區(qū)別呢?下面讓我們先看實(shí)現(xiàn)的代碼,然后我們?cè)龠M(jìn)行分析。

#includeusing namespace std;int main(){	cout << "Hellow world" << endl;	double b;	char c;	cin >> b >> c;	cout << b << " " << c << endl;	return 0;   }

知識(shí)點(diǎn)分析

1.使用cout標(biāo)準(zhǔn)輸出(控制臺(tái))和cin標(biāo)準(zhǔn)輸出(控制臺(tái))時(shí),必須包含頭文件以及std標(biāo)準(zhǔn)命名空間。

2.cin可以不再像scanf那樣該一個(gè)變量輸入值需要取地址且按照相應(yīng)的格式,比如%d,cin的輸入格式為cin >> 變量名;cout的使用不像c語(yǔ)言中的printf一樣需要按照各種格式輸出,而是直接按照格式cout << 變量名;

3.有沒(méi)有注意到,C語(yǔ)言中輸入輸出需要考慮數(shù)據(jù)的類型,而在C++中進(jìn)行輸入輸出時(shí),是不需要考慮數(shù)據(jù)的類型的。


4.缺省參數(shù)

4.1缺省參數(shù)的定義

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

實(shí)例:

void Test(int a = 1){	cout << a << endl;}int main(){	Test();	Test(100);	return 0;}

分析:

在Test()中,沒(méi)有傳參,默認(rèn)使用缺省參數(shù),a的輸出值為1;

在Test(100)中,有傳參,這時(shí)不使用缺省參數(shù),a的輸出值為100。


4.2 缺省參數(shù)的分類

4.2.1全缺省參數(shù)

所有參數(shù)我們都將其設(shè)置為缺省參數(shù)

void Test(int a = 10; int b = 20; int c = 30){	cout << "a = " << a << endl;	cout << "a = " << b << endl;	cout << "a = " << c << endl;}

4.2.2 半缺省參數(shù)

將函數(shù)中的部分參數(shù)設(shè)置為缺省參數(shù),注意缺省參數(shù)其必須從右到左設(shè)置,且不能間隔設(shè)置。

void TestFunc(int a, int b = 10, int c = 20){	cout<<"a = "<<a<<endl;	cout<<"b = "<<b<<endl;	cout<<"c = "<<c<<endl;}

缺省參數(shù)不能在函數(shù)聲明和定義中同時(shí)出現(xiàn),原因一樣,所以一般是在聲明中寫默認(rèn)參數(shù)。


5.函數(shù)重載

5.1 函數(shù)重載的定義

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

舉例如下代碼均為函數(shù)重載

函數(shù)返回類型無(wú)所謂,關(guān)鍵在于形參列表(參數(shù)個(gè)數(shù) 或 類型 或 順序)必須不同。

int Add(int a, int b){	return a + b;}int Add(int a, double b){	return a + b;}double Add(double a, double b){	return a + b;}

5.2 為什么C++有函數(shù)重載,C語(yǔ)言卻沒(méi)有,C++是如何實(shí)現(xiàn)函數(shù)重載的呢?

我們知道,c程序在鏈接階段,會(huì)把所有目標(biāo)文件進(jìn)行整合,最終形成.exe文件,而在整合過(guò)程中,會(huì)有一步符號(hào)表匯聚,所以,在c語(yǔ)言中如果有多個(gè)相同名字的函數(shù),鏈接階段將不知道所調(diào)用的函數(shù)到底是同名函數(shù)中的具體哪一個(gè),進(jìn)而導(dǎo)致編譯器報(bào)錯(cuò)。

那為什么C語(yǔ)言會(huì)有函數(shù)重載,編譯器不會(huì)報(bào)錯(cuò)呢?

因?yàn)樵贑++中,形成符號(hào)表的時(shí)候,會(huì)對(duì)重名函數(shù)進(jìn)行修飾,修飾原則是_Z n name t.其中n是函數(shù)名長(zhǎng)度,name是函數(shù)名,t是所有參數(shù)類型的首字母縮寫.

例如

int Add(int a, int b){	return a + b;}int Add(int a, double b){	return a + b;}

當(dāng)我們?cè)贑++的環(huán)境中時(shí),我們通過(guò)編譯的一些方式可以獲得如下內(nèi)容,能觀察到函數(shù)重載之后這倆Add函數(shù)的地址是不同的。

我們清楚了函數(shù)重載的原理,要求參數(shù)不同,這樣修飾出來(lái)的名字也就不同了。

5.3 如果去修改編譯器,能不能實(shí)現(xiàn)函數(shù)名相同、參數(shù)相同但返回值不同時(shí),也構(gòu)成重載?

結(jié)論:不行!

比如以下這倆func函數(shù),僅僅是函數(shù)返回值不同,嘗試把返回值引入修飾規(guī)則當(dāng)中,即便編譯器層面過(guò)得去,語(yǔ)法調(diào)用層面也很難通過(guò)!



C++的關(guān)鍵字、命名空間、缺省參數(shù)、IO、函數(shù)重載內(nèi)容到此介紹結(jié)束了,感謝您的閱讀!!!如果內(nèi)容對(duì)你有幫助的話,記得給我三連(點(diǎn)贊、收藏、關(guān)注)——做個(gè)手有余香的人。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/122333.html

相關(guān)文章

  • C++】初窺門徑---入門篇

    摘要:在大型的工程中,自己定義的變量函數(shù),類名與其他人定義的相沖突等問(wèn)題。使用標(biāo)準(zhǔn)輸出控制臺(tái)和標(biāo)準(zhǔn)輸入鍵盤時(shí),必須包含頭文件以及標(biāo)準(zhǔn)命名空間。缺省參數(shù)概念缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。 目錄 前言 1.命名空間 1.1命名空間定義 1.2 命名空間使用 2. C++的輸入和...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • C++C++快速入門

    摘要:中包含的即為命名空間的成員。使用輸入輸出更方便,不需增加數(shù)據(jù)格式控制,比如整形,字符可以連續(xù)輸出,表示換行缺省參數(shù)備胎,就是給汽車準(zhǔn)備一個(gè)備用輪胎,一旦那個(gè)輪子爆胎或者出了問(wèn)題,備用輪胎就方便及時(shí)地取而代之,汽車就不至于中途拋錨。 ...

    TalkingData 評(píng)論0 收藏0
  • C++入門—namespace的使用傻傻分不清楚&amp;C++函數(shù)參數(shù)也可以配備胎&a

    摘要:使用輸入輸出更方便,不需增加數(shù)據(jù)格式控制,比如整形,字符等缺省參數(shù)備胎缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。此外,函數(shù)重載要求參數(shù)不同,而跟返回值沒(méi)關(guān)系。 ...

    pingan8787 評(píng)論0 收藏0
  • C++從0到1】新手都能看懂的C++入門(上篇),建議收藏

    摘要:上面這三種均不造成重載,現(xiàn)在來(lái)說(shuō)明原因。結(jié)論對(duì)于引用返回,返回的對(duì)象必須是棧幀銷毀后還存在的。全局,靜態(tài),未銷毀的函數(shù)棧幀當(dāng)中的都是可以的指針與引用如圖兩者底層實(shí)現(xiàn)差不多,引用是用指針模擬的。不建議聲明和定義分離,分離會(huì)導(dǎo)致鏈接錯(cuò)誤。 ...

    xcold 評(píng)論0 收藏0
  • 關(guān)于C++基礎(chǔ)的一些“碎碎念”

    摘要:使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,關(guān)鍵字的出現(xiàn)就是針對(duì)這種問(wèn)題的。缺省參數(shù)概念缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。 ...

    Jackwoo 評(píng)論0 收藏0

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<