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

C++函數(shù)重載介紹與原理詳解

 更新時(shí)間:2022年01月11日 16:38:09   作者:Enjoy?solitude-  
這篇文章主要為大家介紹了C++函數(shù)重載介紹與原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

函數(shù)重載

函數(shù)重載的概念

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

#include <iostream>
using namespace std;
int Add(int x, int y)
{
	return x + y;
}
double Add(double x, double y)
{
	return x + y;
}
int main()
{
	cout << Add(1, 2) << endl;//打印1+2的結(jié)果
	cout << Add(1.1, 2.2) << endl;//打印1.1+2.2的結(jié)果
	return 0;
}

注意:形參列表不同是指參數(shù)個(gè)數(shù)、參數(shù)類型或者參數(shù)順序不同,若僅僅是返回類型不同,則不能構(gòu)成重載。

函數(shù)重載的原理(名字修飾)

為什么C++支持函數(shù)重載,而C語(yǔ)言不支持函數(shù)重載呢?

我們知道,一個(gè)C/C++程序要運(yùn)行起來(lái)都需要經(jīng)歷以下幾個(gè)階段:預(yù)處理、編譯、匯編、鏈接。

在編譯階段會(huì)將程序中的每個(gè)源文件的全局范圍的變量符號(hào)分別進(jìn)行匯總。在匯編階段會(huì)給每個(gè)源文件匯總出來(lái)的符號(hào)分配一個(gè)地址(若符號(hào)只是一個(gè)聲明,則給其分配一個(gè)無(wú)意義的地址),然后分別生成一個(gè)符號(hào)表。最后在鏈接期間會(huì)將每個(gè)源文件的符號(hào)表進(jìn)行合并,若不同源文件的符號(hào)表中出現(xiàn)了相同的符號(hào),則取合法的地址為合并后的地址(重定位)。

C語(yǔ)言中,匯編階段進(jìn)行符號(hào)匯總時(shí),一個(gè)函數(shù)匯總后的符號(hào)就是其函數(shù)名,所以當(dāng)匯總時(shí)發(fā)現(xiàn)多個(gè)相同的函數(shù)符號(hào)時(shí),編譯器便會(huì)報(bào)錯(cuò)。而C++中進(jìn)行符號(hào)匯總時(shí),對(duì)函數(shù)的名字修飾做了改動(dòng),函數(shù)匯總出的符號(hào)不再單單是函數(shù)的函數(shù)名,而是通過(guò)其參數(shù)的類型和個(gè)數(shù)以及順序等信息匯總出 一個(gè)符號(hào),這樣一來(lái),就算是函數(shù)名相同的函數(shù),只要其參數(shù)的類型或參數(shù)的個(gè)數(shù)或參數(shù)的順序不同,那么匯總出來(lái)的符號(hào)也就不同了。

注:不同編譯器下,對(duì)函數(shù)名的修飾不同,但都是一樣的。

總結(jié):

  • C語(yǔ)言不能支持重載,是因?yàn)橥瘮?shù)沒(méi)辦法區(qū)分。而C++是通過(guò)函數(shù)修飾規(guī)則來(lái)區(qū)分的,只要函數(shù)的形參列表不同,修飾出來(lái)的名字就不一樣,也就支持了重載。
  • 另外我們也理解了,為什么函數(shù)重載要求參數(shù)不同,和返回值沒(méi)關(guān)系。

extern “C”

有時(shí)候在C++工程中可能需要將某些函數(shù)按照C的風(fēng)格來(lái)編譯,在函數(shù)前加“extern C”,意思是告訴編譯器,將該函數(shù)按照C語(yǔ)言規(guī)則來(lái)編譯。

注意:在函數(shù)前加“extern C”后,該函數(shù)便不能支持重載了。

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 淺析C語(yǔ)言中對(duì)于char*和char[]的理解

    淺析C語(yǔ)言中對(duì)于char*和char[]的理解

    char * s 只是一個(gè)保存字符串首地址的指針變量,char a[]是許多連續(xù)的內(nèi)存單元,單元中的元素是char型,char * 和 char a[]具有相同的效果,源于字符串的本質(zhì),這篇文章主要介紹了C語(yǔ)言中對(duì)于char*和char[]的理解,需要的朋友可以參考下
    2023-02-02
  • 詳解C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù)

    詳解C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù)

    這篇文章主要介紹了C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • C++實(shí)現(xiàn)單例模式日志輸出詳解

    C++實(shí)現(xiàn)單例模式日志輸出詳解

    這篇文章主要為大家詳細(xì)介紹了C++中單例模式的相關(guān)知識(shí),并給出單例模式日志實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • C++判斷子序列題目詳解

    C++判斷子序列題目詳解

    這篇文章主要為大家介紹了C++判斷子序列題目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)的示例代碼

    Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)的示例代碼

    做慣了靜態(tài)圖,今天來(lái)搞一搞動(dòng)態(tài)圖吧!本文將利用Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)效果,文中的示例代碼講解詳細(xì),感興趣的可以動(dòng)手嘗試一下
    2022-06-06
  • C++日志記錄類實(shí)例解析

    C++日志記錄類實(shí)例解析

    這篇文章主要介紹了C++日志記錄類實(shí)例,代碼功能非常實(shí)用,需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換的示例代碼

    C語(yǔ)言實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換的示例代碼

    生活中最常見(jiàn)的進(jìn)制是十進(jìn)制,而有一類編程題會(huì)要求將十進(jìn)制轉(zhuǎn)換為其他進(jìn)制,本文將主要講述C語(yǔ)言中常見(jiàn)的幾類進(jìn)制轉(zhuǎn)換問(wèn)題,希望對(duì)大家有所幫助
    2023-04-04
  • 基于openCV實(shí)現(xiàn)人臉檢測(cè)

    基于openCV實(shí)現(xiàn)人臉檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了基于openCV實(shí)現(xiàn)人臉檢測(cè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 怎么在C++二進(jìn)制文件中注入git信息詳解

    怎么在C++二進(jìn)制文件中注入git信息詳解

    這篇文章主要給大家介紹了關(guān)于怎么在C++二進(jìn)制文件中注入git信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • c++ bitset詳解

    c++ bitset詳解

    這篇文章主要介紹了C++ bitset用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08

最新評(píng)論

襄垣县| 永城市| 鲜城| 扎囊县| 安阳市| 和田县| 随州市| 尼木县| 通山县| 壶关县| 泊头市| 东乌珠穆沁旗| 泰顺县| 南宫市| 大新县| 志丹县| 铁岭县| 樟树市| 宣汉县| 三都| 新蔡县| 高雄县| 卢龙县| 新建县| 淄博市| 江川县| 陕西省| 苏尼特右旗| 玉林市| 湘乡市| 大埔县| 涟源市| 全椒县| 七台河市| 滁州市| 唐山市| 息烽县| 镇宁| 湛江市| 涡阳县| 大兴区|