成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

winterdawn / 3968人閱讀

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

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

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

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

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



1.關(guān)鍵字

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


2.命名空間

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

#include using namespace std;

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

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

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

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


2.1 命名空間的定義

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

代碼1

定義個叫“l(fā)inmanman”的命名空間中,在這個空間中定義變量和函數(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)有多個一樣的命名空間時,編譯器會自動將他們整合在一起。

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);    //這里我們可以理解為作用域限定符"::"的使用,讓我們在lin這個命名空間中找到了a這個變量	return 0;}

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

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

3.輸入&輸出

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

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

知識點分析

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

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

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


4.缺省參數(shù)

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

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

實例:

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

分析:

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

在Test(100)中,有傳參,這時不使用缺省參數(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ù)聲明和定義中同時出現(xiàn),原因一樣,所以一般是在聲明中寫默認參數(shù)。


5.函數(shù)重載

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

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

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

函數(shù)返回類型無所謂,關(guān)鍵在于形參列表(參數(shù)個數(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語言卻沒有,C++是如何實現(xiàn)函數(shù)重載的呢?

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

那為什么C語言會有函數(shù)重載,編譯器不會報錯呢?

因為在C++中,形成符號表的時候,會對重名函數(shù)進行修飾,修飾原則是_Z n name t.其中n是函數(shù)名長度,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)境中時,我們通過編譯的一些方式可以獲得如下內(nèi)容,能觀察到函數(shù)重載之后這倆Add函數(shù)的地址是不同的。

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

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

結(jié)論:不行!

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



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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/122333.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    Jackwoo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<