亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

函數(shù)重載簡介:在C++中,可以為兩個或兩個以上的函數(shù)提供相同的函數(shù)名稱,只要參數(shù)類型不同,或者參數(shù)類型相同而參數(shù)個數(shù)不同,又或者參數(shù)類型參數(shù)個數(shù)相同,參數(shù)次序不同,稱為函數(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)一個函數(shù)名在同一個域中被聲明多次,兩個函數(shù)的參數(shù)表中參數(shù)個數(shù)或者類型順序不同,則認(rèn)為是函數(shù)重載。

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

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

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

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

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

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

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

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

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

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

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

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

例:

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

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

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

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

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

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

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

常用代號如下:

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 -- 表示指針,后面的代號表明指針類型

例:

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

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

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

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

(2)參數(shù)類型相同,參數(shù)個數(shù)不同

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

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

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

例:

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

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

相關(guān)文章

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

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

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

    C語言簡明講解隊列的實現(xiàn)方法

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

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

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

    淺談char*類型返回值和字符串常量

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論