C++函數(shù)重載的定義與原因詳解
引例
如果要求你只能通過print函數(shù),即能打印字符串,又能打印一個整型。
雖然在C語言中我們可以通過 print_i 和print_s來實現(xiàn)功能。
但是C++更方便。C++支持同一函數(shù)名,完成類似的功能的語法。
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ù)被稱為
重載函數(shù)。重載函數(shù)通常用來命名一組功能相似的函數(shù),這樣做減少了函數(shù)名的數(shù)量,避免了名字空間的污染,對于程序的可讀性有很大的好處.
函數(shù)重載規(guī)則
函數(shù)重載的條件:參數(shù)個數(shù) 或 類型 或 順序必須不同,函數(shù)名不看

為什么C不支持函數(shù)重載而C++可以
要想達到函數(shù)重載必然解決:函數(shù)命名問題 —編譯器只需要將用戶定義的各種標識符,再加載內(nèi)存中,對其進行修飾即----內(nèi)部名稱
因為如果不解決函數(shù)命名問題,在編譯時,就無法形成符號表,同時在鏈接階段時,匯總符號表也成問題,畢竟符號表決定了,程序到達調(diào)用哪個函數(shù)。

內(nèi)部名稱
- 內(nèi)部名稱:C和C++的語言實現(xiàn)都會按照特定規(guī)則,將定義的標識符(各種變量名,函數(shù)名,類型,命名空間等)轉換為對應的內(nèi)部名稱.通過內(nèi)部名稱編譯器就可以識別各種標識符.
- 對于C,僅在標識符加上前綴‘``_`’即swap()》》_swap()
- 如果從唯一識別函數(shù)作用來看,這種規(guī)則沒有任何用:畢竟除了static和命名空間域里面的函數(shù),函數(shù)都具有外聯(lián)性,一但在不同文件出現(xiàn)同名函數(shù),程序就CREASH。
- 對于C++,不同編譯器下是不同的:
LINUX:

window:

正是通過這種內(nèi)部命名規(guī)則,函數(shù)重載成為可能。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
C++11運算符重載和向量類重載實例詳解(<<,>>,+,-,*等)
這篇文章主要給大家介紹了關于C++11運算符重載和向量類重載的相關資料,主要包括<<,>>,+,-,*等,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-07-07
詳解C++中StringBuilder類的實現(xiàn)及其性能優(yōu)化
在Java和C#中,StringBuilder可以創(chuàng)造可變字符序列來動態(tài)地擴充字符串,那么在C++中我們同樣也可以實現(xiàn)一個StringBuilder并且用來提升性能,下面就來詳解C++中StringBuilder類的實現(xiàn)及其性能優(yōu)化2016-05-05

