最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析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.編譯器的工作

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

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

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

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

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

“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:僅僅應用于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ù)之間的關系

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

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

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

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

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

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

常用代號如下:

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ù)

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

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

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

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

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

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

例:

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

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

相關文章

  • C++中的異或運算符^的使用方法

    C++中的異或運算符^的使用方法

    本篇文章對C++中的異或運算符^的使用方法進行的詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 純C++代碼詳解二叉樹相關操作

    純C++代碼詳解二叉樹相關操作

    二叉樹(Binary?tree)是樹形結構的一個重要類型。許多實際問題抽象出來的數(shù)據(jù)結構往往是二叉樹形式。本文將通過代碼為大家詳細講講C++二叉樹的一些常規(guī)操作,感興趣的可以學習一下
    2022-07-07
  • C語言實現(xiàn)井字棋游戲

    C語言實現(xiàn)井字棋游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C++從一個文件夾中讀出所有txt文件的方法示例

    C++從一個文件夾中讀出所有txt文件的方法示例

    這篇文章主要給大家介紹了關于C++從一個文件夾中讀出所有txt文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • C++11獲取線程返回值的實現(xiàn)代碼

    C++11獲取線程返回值的實現(xiàn)代碼

    這篇文章主要介紹了C++11獲取線程返回值的實現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04
  • 關于C++繼承你可能會忽視的點

    關于C++繼承你可能會忽視的點

    繼承是面向對象三大特性之一,有些類與類之間存在特殊的關系,下面這篇文章主要給大家介紹了關于C++繼承你可能會忽視的點,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • C++中l(wèi)ist的用法實例講解

    C++中l(wèi)ist的用法實例講解

    list是順序容器的一種,list是一個雙向鏈表,使用list需要包含頭文件list,這篇文章主要給大家介紹了關于C++中l(wèi)ist的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • 詳解如何用c++實現(xiàn)平衡二叉樹

    詳解如何用c++實現(xiàn)平衡二叉樹

    平衡二叉樹(Balanced Binary Tree)又被稱為AVL樹(有別于AVL算法),由前蘇聯(lián)的數(shù)學家Adelse-Velskil和Landis在1962年提出的高度平衡的二叉樹,根據(jù)科學家的英文名也稱為AVL樹。本文介紹了它的原理和如何用C++代碼來實現(xiàn)
    2021-06-06
  • C++ 二維數(shù)組傳參的四種方式

    C++ 二維數(shù)組傳參的四種方式

    C++的二維數(shù)組里面,通過用數(shù)組名傳參,傳過去后數(shù)組名會退化成一個一維數(shù)組指針,所以C++的函數(shù)參數(shù)不能像C語言一樣去寫,本文主要介紹了C++ 二維數(shù)組傳參的四種方式,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • C語言實現(xiàn)密碼強度檢測

    C語言實現(xiàn)密碼強度檢測

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)密碼強度檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

揭西县| 都江堰市| 合水县| 桦南县| 府谷县| 惠州市| 阜新| 无棣县| 通榆县| 达拉特旗| 从化市| 囊谦县| 琼海市| 合江县| 仁布县| 呼伦贝尔市| 合肥市| 大连市| 通州区| 长岭县| 河北省| 汉源县| 衡阳市| 普兰店市| 泊头市| 伊金霍洛旗| 武胜县| 峡江县| 林芝县| 建阳市| 吐鲁番市| 阿图什市| 浦城县| 榕江县| 平泉县| 驻马店市| 体育| 铅山县| 新田县| 柞水县| 丘北县|