欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析C++中的函數(shù)重載

 更新時(shí)間:2023年08月08日 11:02:58   作者:悲傷的魚(yú)香肉絲er  
這篇文章主要介紹了淺析C++中的函數(shù)重載,在C++中,可以為兩個(gè)或兩個(gè)以上的函數(shù)提供相同的函數(shù)名稱(chēng),只要參數(shù)類(lèi)型不同,或者參數(shù)類(lèi)型相同而參數(shù)個(gè)數(shù)不同,又或者參數(shù)類(lèi)型參數(shù)個(gè)數(shù)相同,參數(shù)次序不同,稱(chēng)為函數(shù)重載,需要的朋友可以參考下

一、什么是函數(shù)重載?

函數(shù)重載簡(jiǎn)介:在C++中,可以為兩個(gè)或兩個(gè)以上的函數(shù)提供相同的函數(shù)名稱(chēng),只要參數(shù)類(lèi)型不同,或者參數(shù)類(lèi)型相同而參數(shù)個(gè)數(shù)不同,又或者參數(shù)類(lèi)型參數(shù)個(gè)數(shù)相同,參數(shù)次序不同,稱(chēng)為函數(shù)重載。

舉例:

int my_max(int a,int b)
{
	return a>b?a:b;
}
char my_max(char a, char b)
{
	return a>b?a:b;
}
double my_max(double a,double b)
{
	return a>b?a:b;
}
int main()
{
	cout<<my_max(12,23)<<endl;
	cout<<my_max(12.23,23.34)<<endl;
	cout<<my_max('a','b')<<endl;
	return 0;
}

二、函數(shù)重載的規(guī)則

1.編譯器的工作

 當(dāng)一個(gè)函數(shù)名在同一個(gè)域中被聲明多次,兩個(gè)函數(shù)的參數(shù)表中參數(shù)個(gè)數(shù)或者類(lèi)型順序不同,則認(rèn)為是函數(shù)重載。

  注意:調(diào)用者與函數(shù)之間的關(guān)系在編譯時(shí)就被綁定在一起,其地址關(guān)聯(lián)。

2.函數(shù)重載的原理

編譯器如何知道與哪個(gè)函數(shù)關(guān)聯(lián)?為什么C語(yǔ)言不能進(jìn)行函數(shù)重載,而C++可以?

編譯器是如何知道調(diào)用者與哪個(gè)函數(shù)關(guān)聯(lián)的呢?——通過(guò)名字粉碎(名字修飾)技術(shù) 。

“C”和“C++”函數(shù)是在編譯鏈接時(shí)通過(guò)修飾名來(lái)識(shí)別,而修飾名就是編譯器在編譯函數(shù)定義或聲明時(shí)生成的字符串,修飾名由函數(shù)名、類(lèi)名、調(diào)用約定、返回類(lèi)型、參數(shù)等共同決定的。

那調(diào)用約定有哪些呢?

_stdcall 回調(diào) :是Pascal缺省的調(diào)用方式,通常用于Win32 Api中,函數(shù)采用從右到左的壓棧方式,自己在退出時(shí)清空堆棧。

C調(diào)用約定(_cdecl):按從右到左的順序壓參數(shù)入棧,由調(diào)用者把參數(shù)彈出,對(duì)于傳送參數(shù)的內(nèi)存棧是由調(diào)用者來(lái)維護(hù)的,因此實(shí)現(xiàn)可變參數(shù)的函數(shù)只能使用該調(diào)用約定。

_fastcall快速調(diào)用:通過(guò)寄存器傳遞參數(shù)(實(shí)際上,它是用ECX和EDX傳送前兩個(gè)雙字或更小的參數(shù),剩下參數(shù)仍然自右至左壓棧傳送,被調(diào)用的函數(shù)在返回前清理傳送參數(shù)的內(nèi)存棧),它的主要特點(diǎn)就是速度快

thiscall:僅僅應(yīng)用于C++類(lèi)中的成員函數(shù),this指針存放于ECX寄存器,參數(shù)自右向左壓

C語(yǔ)言為什么不能實(shí)現(xiàn)函數(shù)重載?

C語(yǔ)言編譯函數(shù)名修飾約定規(guī)則:C語(yǔ)言修飾函數(shù)名非常簡(jiǎn)單,_cdecl是C/C++的缺省調(diào)用方式,調(diào)用約定前面添加下劃線(xiàn)前綴即可,例:_functionname

例:

C語(yǔ)言編譯時(shí)無(wú)法通過(guò)修飾名區(qū)分調(diào)用者與函數(shù)之間的關(guān)系

而在C++中函數(shù)名修飾約定規(guī)則是:

(1)以“?”標(biāo)識(shí)函數(shù)名開(kāi)始,后跟函數(shù)名

(2)函數(shù)名后面以“@@YA”標(biāo)識(shí)參數(shù)表的開(kāi)始,后跟參數(shù)表

(3)參數(shù)表以代號(hào)表示

(4)參數(shù)表的第一項(xiàng)為該函數(shù)的返回值類(lèi)型,其后依次為參數(shù)的數(shù)據(jù)類(lèi)型,指針標(biāo)識(shí)在其所指數(shù)據(jù)類(lèi)型前

(5)參數(shù)表后以@Z標(biāo)識(shí)整個(gè)名字的結(jié)束,如果該函數(shù)無(wú)參數(shù),則以“Z”標(biāo)識(shí)結(jié)束。

常用代號(hào)如下:

X -- void

D -- char

E -- unsigned char

F -- short

H -- int

I -- unsigned int

J -- long

K -- unsigned long

M -- float

N -- double

_N -- bool

PA -- 表示指針,后面的代號(hào)表明指針類(lèi)型

例:

編譯鏈接時(shí),把參數(shù)類(lèi)型,函數(shù)返回類(lèi)型作為命名的一部分,編譯器編譯時(shí)可以區(qū)分調(diào)用哪個(gè)函數(shù)。

3.判斷函數(shù)重載的依據(jù)

可以確認(rèn)為函數(shù)重載:

(1)函數(shù)名相同,參數(shù)類(lèi)型不同

(2)參數(shù)類(lèi)型相同,參數(shù)個(gè)數(shù)不同

(3)參數(shù)類(lèi)型相同,參數(shù)個(gè)數(shù)相同,參數(shù)次序不同

不能作為判斷函數(shù)重載的依據(jù)的:

(1)參數(shù)表相同,返回類(lèi)型不同

例:

當(dāng)調(diào)用函數(shù)時(shí),有時(shí)候不需要返回值,編譯器不知道調(diào)去用哪個(gè)函數(shù),所以返回類(lèi)型不能作為判斷重載的依據(jù)。

到此這篇關(guān)于淺析C++中的函數(shù)重載的文章就介紹到這了,更多相關(guān)C++函數(shù)重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中declspec(dllexport)和declspec(dllimport)?的用法介紹

    C++中declspec(dllexport)和declspec(dllimport)?的用法介紹

    這篇文章介紹了C++中declspec(dllexport)和declspec(dllimport)?的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C語(yǔ)言簡(jiǎn)明講解隊(duì)列的實(shí)現(xiàn)方法

    C語(yǔ)言簡(jiǎn)明講解隊(duì)列的實(shí)現(xiàn)方法

    隊(duì)列(Queue)與棧一樣,是一種線(xiàn)性存儲(chǔ)結(jié)構(gòu),它具有如下特點(diǎn):隊(duì)列中的數(shù)據(jù)元素遵循“先進(jìn)先出”(First?In?First?Out)的原則,簡(jiǎn)稱(chēng)FIFO結(jié)構(gòu)。在隊(duì)尾添加元素,在隊(duì)頭刪除元素
    2022-04-04
  • c語(yǔ)言中static的用法詳細(xì)示例分析

    c語(yǔ)言中static的用法詳細(xì)示例分析

    以下是對(duì)c語(yǔ)言中static函數(shù)的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • 淺談char*類(lèi)型返回值和字符串常量

    淺談char*類(lèi)型返回值和字符串常量

    下面小編就為大家?guī)?lái)一篇淺談char*類(lèi)型返回值和字符串常量。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • C++中Digraphs、Trigraphs和Tokens的深入講解

    C++中Digraphs、Trigraphs和Tokens的深入講解

    這篇文章主要給大家介紹了關(guān)于C++中Digraphs、Trigraphs和Tokens的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 圖解AVL樹(shù)數(shù)據(jù)結(jié)構(gòu)輸入與輸出及實(shí)現(xiàn)示例

    圖解AVL樹(shù)數(shù)據(jù)結(jié)構(gòu)輸入與輸出及實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了C++圖解AVL樹(shù)數(shù)據(jù)結(jié)構(gòu)輸入與輸出操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語(yǔ)言詳細(xì)講解strcpy strcat strcmp函數(shù)的模擬實(shí)現(xiàn)

    C語(yǔ)言詳細(xì)講解strcpy strcat strcmp函數(shù)的模擬實(shí)現(xiàn)

    這篇文章主要介紹了怎樣用C語(yǔ)言模擬實(shí)現(xiàn)strcpy與strcat和strcmp函數(shù),strcpy()函數(shù)是C語(yǔ)言中的一個(gè)復(fù)制字符串的庫(kù)函數(shù),strcat()函數(shù)的功能是實(shí)現(xiàn)字符串的拼接,strcmp()函數(shù)作用是比較字符串str1和str2是否相同
    2022-05-05
  • C語(yǔ)言實(shí)現(xiàn)打印楊輝三角的方法詳細(xì)(三種方法)

    C語(yǔ)言實(shí)現(xiàn)打印楊輝三角的方法詳細(xì)(三種方法)

    楊輝三角是中國(guó)古代數(shù)學(xué)的杰出研究成果之一,它把二項(xiàng)式系數(shù)圖形化,把組合數(shù)內(nèi)在的一些代數(shù)性質(zhì)直觀地從圖形中體現(xiàn)出來(lái),是一種離散型的數(shù)與形的結(jié)合。本文將介紹三種可以實(shí)現(xiàn)打印楊輝三角的辦法,感興趣的可以試一試
    2022-01-01
  • C++連接并使用MySQL數(shù)據(jù)庫(kù)

    C++連接并使用MySQL數(shù)據(jù)庫(kù)

    這篇文章主要為大家詳細(xì)介紹了C++連接并使用MySQL數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 純c實(shí)現(xiàn)異常捕獲try-catch組件教程示例

    純c實(shí)現(xiàn)異常捕獲try-catch組件教程示例

    這篇文章主要為大家介紹了純c實(shí)現(xiàn)異常捕獲try-catch組件教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論