国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++中命名空間、缺省參數(shù)、函數(shù)重載

這篇具有很好參考價值的文章主要介紹了C++中命名空間、缺省參數(shù)、函數(shù)重載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.命名空間

2.缺省參數(shù)

3.函數(shù)重載

1.命名空間

在C++中定義命名空間我們需要用到namespace關(guān)鍵字,后面跟上命名空間的名字,結(jié)構(gòu)框架有點類似結(jié)構(gòu)體(如圖所示)

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

上面的代碼我一一進行講解:

1.我們先來說第三行和main函數(shù)中的代碼意思,第三行代碼的意思是展開std庫的空間,std是C++的一個基礎(chǔ)庫,我們?yōu)槭裁匆归_它呢?包了iostream文件難道不行嗎?這就要涉及到編譯C++程序時編譯器的搜索方式了,編譯器默認是從局部空間和全局空間來進行搜索,而我們的cout和endl雖然在iostream文件里,但它不在編譯器的默認搜索范圍之內(nèi),所以想使用cout和endl我們有兩種方式:

第一種就是上述展開std庫的方法;

第二種我們可以指定到對應(yīng)的空間域進行調(diào)用(如圖所示)

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

這是一種方法,但是這樣寫太麻煩了,所以在一般的聯(lián)系中我們不會寫到太多的代碼,這個時候我們就可以將std庫展開,展開就相當于是全局域,就在我們編譯器的默認搜索范圍之內(nèi)了。

::就是我們的域作用限制符,前面跟上空間名稱就可以指定到相應(yīng)的位置。

2.接下來我們來了解命名空間域,它就相當于劃分了一塊地盤,里面住著各種成員,比如張三家有一只羊,李四家也有一只羊,拿誰家的羊有地址就行,張三家的羊跟李四家的也沒有關(guān)系。

所以在C語言中同一個變量名不能定義兩次,但在C++中就可以。

2.缺省參數(shù)

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

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

如圖所示,缺省參數(shù)使C++在調(diào)用函數(shù)的時候比C更加靈活。

缺省參數(shù)主要分為兩種:

1.全缺省參數(shù)

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

顧名思義,全缺省參數(shù)就是給每一個參數(shù)都設(shè)置一個缺省值;

2.半缺省參數(shù)

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

半缺省參數(shù)就是不全部設(shè)置缺省值的情況。

注意:

1.半缺省參數(shù)的設(shè)置必須從右往左依次設(shè)置,不能間隔著給。

2.函數(shù)的聲明與定義如果分開寫的話不能同時寫缺省參數(shù),缺省參數(shù)要寫在聲明中。

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

如上圖,我們想寫的是同一個函數(shù),但是缺省值不一樣,這個時候我們?nèi)绻粋鲗崊?,編譯器該選哪個值?所以為了避免這種情況,就規(guī)定了聲明和定義不能同時寫缺省值,那么為什么要寫在聲明中呢?這是因為我們測試時是會包含a.h頭文件的,編譯器在預(yù)處理階段會將頭文件展開,相當于把頭文件的內(nèi)容復(fù)制到測試文件中,在編譯階段檢測到是有這么個函數(shù)聲明,所以不會報錯。

3.缺省參數(shù)必須是常量或全局變量。

4.C語言不支持缺省參數(shù)。

3.函數(shù)重載

自然語言中,一個詞可以有多重含義,人們可以通過上下文來判斷該詞的真正含義,即該詞被重載了。

比如:以前有一個笑話,中國有兩個體育項目大家根本不用看,也不用擔(dān)心。一個是乒乓球,一個是男足。前者是“誰也贏不了!”,后者是“誰也贏不了!”。

3.1函數(shù)重載的概念

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

#include<iostream>
using namespace std;
// 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;
}



int main()
{
Add(10, 20);
Add(10.1, 20.2);
f();
f(10);
f(10, 'a');
f('a', 10);
return 0;
}

5.2C++支持函數(shù)重載的原理

1. 實際項目通常是由多個頭文件和多個源文件構(gòu)成,而通過C語言階段學(xué)習(xí)的編譯鏈接,我們可以知道,【當前a.cpp中調(diào)用了b.cpp中定義的Add函數(shù)時】,編譯后鏈接前,a.o的目標

文件中沒有Add的函數(shù)地址,因為Add是在b.cpp中定義的,所以Add的地址在b.o中。那么

怎么辦呢?

2. 所以鏈接階段就是專門處理這種問題,鏈接器看到a.o調(diào)用Add,但是沒有Add的地址,就

會到b.o的符號表中找Add的地址,然后鏈接到一起。

3. 那么鏈接時,面對Add函數(shù),鏈接接器會使用哪個名字去找呢?這里每個編譯器都有自己的函數(shù)名修飾規(guī)則。

4. 由于Windows下vs的修飾規(guī)則過于復(fù)雜,而Linux下g++的修飾規(guī)則簡單易懂,下面我們使

用了g++演示了這個修飾后的名字。
5. 通過下面我們可以看出gcc的函數(shù)修飾后名字不變。而g++的函數(shù)修飾后變成【_Z+函數(shù)長度+函數(shù)名+類型首字母】。

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

我們在Linux中寫了Add和Func兩個函數(shù),接下來我們看看gcc編譯后函數(shù)的名字

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

如圖所示,還是Add和Func,沒有任何變化。

接下來我們來看看C++

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

我們還是寫同樣的代碼來進行更直觀的比較

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

在linux下,采用g++編譯完成后,函數(shù)名字的修飾發(fā)生改變,編譯器將函數(shù)參數(shù)類型信息添加到修改后的名字中。
windows下的命名規(guī)則:

C++中命名空間、缺省參數(shù)、函數(shù)重載,c++,開發(fā)語言

對比Linux會發(fā)現(xiàn),windows下vs編譯器對函數(shù)名字修飾規(guī)則相對復(fù)雜難懂,但道理都是類似的,我們就不做細致的研究了。

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

7. 如果兩個函數(shù)函數(shù)名和參數(shù)是一樣的,返回值不同是不構(gòu)成重載的,因為調(diào)用時編譯器沒辦法區(qū)分。文章來源地址http://www.zghlxwxcb.cn/news/detail-816495.html

到了這里,關(guān)于C++中命名空間、缺省參數(shù)、函數(shù)重載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包