本系列 C++ 相關文章 僅為筆者學習筆記記錄,用自己的理解記錄學習!C++ 學習系列將分為三個階段:基礎篇、STL 篇、高階數(shù)據(jù)結(jié)構(gòu)與算法篇,相關重點內(nèi)容如下:
- 基礎篇:類與對象(涉及C++的三大特性等);
- STL 篇:學習使用 C++ 提供的 STL 相關庫;
- 高階數(shù)據(jù)結(jié)構(gòu)與算法篇: 手動實現(xiàn)自己的 STL 庫 及 設計實現(xiàn)高階數(shù)據(jù)結(jié)構(gòu),如 B樹、B+樹、紅黑樹等。
學習集:
- C++ 入門到入土?。。W習合集
- Linux 從命令到網(wǎng)絡再到內(nèi)核!學習合集
本期內(nèi)容:C++ 函數(shù)重載
目錄:
1. 函數(shù)重載的認識
2. 函數(shù)重載示例
3. 函數(shù)重載的注意點說明
4. C++支持函數(shù)重載的原理
5. 補充:編譯器內(nèi)函數(shù)重載提示
【 C++學習合集鏈接 】
1. 函數(shù)重載的認識
函數(shù)重載:是函數(shù)的一種特殊情況,C++ 中允許再同一個作用域中聲明幾個功能相似的同名函數(shù)!這些函數(shù)的區(qū)別在于:形參列表不同!【 參數(shù)個數(shù)!參數(shù)類型!類型順序!不同!??! 】
2. 函數(shù)重載示例
問題引入:若要求實現(xiàn)任意兩個同類型值加和并返回結(jié)果。
以 int 類型為例:
C 語言中,我們會有如下設計及實現(xiàn)!
int sum(int a, int b){
return a+b;
}
若此時還要實現(xiàn)其他類型值的加和,我們就需要對 sum 函數(shù)名進行一定的標識,以防函數(shù)名相同引發(fā)錯誤?。ǘ鄠€函數(shù)不同命名,但功能相同,顯得十分麻煩)
C++ 中的函數(shù)重載完美實現(xiàn)了對該種情況的解決!如下是 C++ 下設計實現(xiàn)的函數(shù)!使用一個函數(shù)名即可(參數(shù)列表不同)
int sum(int a, int b){
return a+b;
}
float sum(float a, float b){
return a+b;
}
double sum(double a, double b){
return a+b;
}
3. 函數(shù)重載的注意點說明
- 從對函數(shù)重載的概念中可知,重載的關鍵區(qū)別在于形參列表不同!與函數(shù)返回值類型無關!
- 關于調(diào)用:編譯器會根據(jù)傳遞的參數(shù)進行自動匹配選擇!
- 形參列表不同在于:參數(shù)個數(shù)、參數(shù)類型、參數(shù)類型順序不同!【 與形參名無關! 】(注意如下代碼示例)
/* 形參列表的不同:與形參名無關! */
void test(int a, int b);
void test(int b, int a); /* 錯誤:不構(gòu)成重載! */
/* 形參列表:參數(shù)個數(shù)不同構(gòu)成重載 */
void test(int, int, int); /* 正確! */
/* 形參列表:個數(shù)相同,類型不同:構(gòu)成重載 */
void test(int, float); /* 正確! */
/* 形參列表:個數(shù)相同,類型順序不同:構(gòu)成重載 */
void test(float, int);
/* 返回值類型不同,不構(gòu)成重載! */
int test(int, int); /* 錯誤! */
4. C++支持函數(shù)重載的原理
此處僅作簡單的分析!
代碼源文件運行起來需要經(jīng)歷以下幾個階段:
- 預處理、編譯、匯編、鏈接
函數(shù)重載這種問題是在鏈接時會有體現(xiàn),當函數(shù)被調(diào)用時,編譯器會去查找對應的函數(shù)名并進行調(diào)用(編譯階段會被用特定的函數(shù)名修飾方式進行修飾(C語言函數(shù)沒有)!)。
函數(shù)名的修飾方式有很多,一般而言,修飾以后會用修飾名的后幾位來體現(xiàn)函數(shù)形參列表的參數(shù)類型情況!但是 C 語言中沒有,C語言中是直接存儲原函數(shù)函數(shù)名作為查詢標識!故 C 語言不支持重載。
【 以下是在 vs 編譯器下進行的測試!通過查看反匯編碼來查看函數(shù)調(diào)用時的函數(shù)標識 】
文章來源:http://www.zghlxwxcb.cn/news/detail-461421.html
5. 補充:編譯器內(nèi)函數(shù)重載提示
文章來源地址http://www.zghlxwxcb.cn/news/detail-461421.html
到了這里,關于C++ 學習 ::【基礎篇:05】:C++ 函數(shù)重載認識及使用、簡單介紹:C++ 支持函數(shù)重載的原因的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!