C++函數(shù)重載的定義與原因詳解
引例
如果要求你只能通過(guò)print函數(shù),即能打印字符串,又能打印一個(gè)整型。
雖然在C語(yǔ)言中我們可以通過(guò) print_i 和print_s來(lái)實(shí)現(xiàn)功能。
但是C++更方便。C++支持同一函數(shù)名,完成類(lèi)似的功能的語(yǔ)法。
void print(int i) { cout << "print a integer :" << i << endl; } void print(string str) { cout << "print a string :" << str << endl; } int main() { print(12); print("hello world!"); return 0; }
函數(shù)重載的定義
函數(shù)重載是指在同一作用域內(nèi)(可以淺顯理解為同一文件內(nèi),畢竟函數(shù)具有外聯(lián)系),可以有一組具有相同函數(shù)名,不同參數(shù)列表的函數(shù),這組函數(shù)被稱(chēng)為
重載函數(shù)
。重載函數(shù)通常用來(lái)命名一組功能相似的函數(shù),這樣做減少了函數(shù)名的數(shù)量,避免了名字空間的污染,對(duì)于程序的可讀性有很大的好處.
函數(shù)重載規(guī)則
函數(shù)重載的條件:參數(shù)個(gè)數(shù) 或 類(lèi)型 或 順序必須不同,函數(shù)名不看
為什么C不支持函數(shù)重載而C++可以
要想達(dá)到函數(shù)重載必然解決:函數(shù)命名問(wèn)題 —編譯器只需要將用戶(hù)定義的各種標(biāo)識(shí)符,再加載內(nèi)存中,對(duì)其進(jìn)行修飾即----內(nèi)部名稱(chēng)
因?yàn)槿绻唤鉀Q函數(shù)命名問(wèn)題,在編譯時(shí),就無(wú)法形成符號(hào)表,同時(shí)在鏈接階段時(shí),匯總符號(hào)表也成問(wèn)題,畢竟符號(hào)表決定了,程序到達(dá)調(diào)用哪個(gè)函數(shù)。
內(nèi)部名稱(chēng)
- 內(nèi)部名稱(chēng):C和C++的語(yǔ)言實(shí)現(xiàn)都會(huì)按照特定規(guī)則,將定義的標(biāo)識(shí)符(各種變量名,函數(shù)名,類(lèi)型,命名空間等)轉(zhuǎn)換為對(duì)應(yīng)的內(nèi)部名稱(chēng).通過(guò)內(nèi)部名稱(chēng)編譯器就可以識(shí)別各種標(biāo)識(shí)符.
- 對(duì)于C,僅在標(biāo)識(shí)符加上前綴‘``_`’即swap()》》_swap()
- 如果從唯一識(shí)別函數(shù)作用來(lái)看,這種規(guī)則沒(méi)有任何用:畢竟除了static和命名空間域里面的函數(shù),函數(shù)都具有外聯(lián)性,一但在不同文件出現(xiàn)同名函數(shù),程序就CREASH。
- 對(duì)于C++,不同編譯器下是不同的:
LINUX:
window:
正是通過(guò)這種內(nèi)部命名規(guī)則,函數(shù)重載成為可能。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C/C++ break和continue區(qū)別及使用方法
這篇文章主要介紹了C/C++ break和continue區(qū)別及使用方法的相關(guān)資料,需要的朋友可以參考下2017-07-07OpenCV邊緣提取算法流程的實(shí)現(xiàn)(附DEMO)
本文主要介紹了OpenCV邊緣提取算法流程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08在vs2010中,輸出當(dāng)前文件路徑與源文件當(dāng)前行號(hào)的解決方法
本篇文章是對(duì)在vs2010中,輸出當(dāng)前文件路徑與源文件當(dāng)前行號(hào)的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++?Cartographer源碼中關(guān)于傳感器的數(shù)據(jù)傳遞實(shí)現(xiàn)
這篇文章主要介紹了C++?Cartographer源碼中關(guān)于傳感器的數(shù)據(jù)傳遞實(shí)現(xiàn),前面已經(jīng)談到了Cartographer中添加軌跡的方法和傳感器的數(shù)據(jù)流動(dòng)走向。發(fā)現(xiàn)在此調(diào)用了LaunchSubscribers這個(gè)函數(shù)來(lái)訂閱相關(guān)傳感器數(shù)據(jù)2023-03-03C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)
這篇文章主要介紹了C++如何計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07