C++淺析函數(shù)重載是什么
前言
這是一個(gè)非常重要的點(diǎn)
函數(shù)重載:是函數(shù)的一種特殊情況,C++允許在同一作用域中聲明幾個(gè)功能類似的同名函數(shù)。
這些同名函數(shù)的 形參列表(參數(shù)個(gè)數(shù) 或 類型 或 順序)必須不同,常用來處理實(shí)現(xiàn)功能類似數(shù)據(jù)類型不同的問題
或者說,給一個(gè)名字賦予第二層意義,一詞多義,有點(diǎn)內(nèi)涵那意思
函數(shù)重載
首先C語言不允許定義同名的函數(shù),但是C++可以,原因就涉及到了函數(shù)重載
函數(shù)重載的要求:函數(shù)名相同,參數(shù)不同(參數(shù)類型不同,參數(shù)個(gè)數(shù)不同)
例子:
定義三個(gè)函數(shù)名相同的函數(shù),在C++中可以構(gòu)成函數(shù)重載
這三個(gè)函數(shù)的函數(shù)名一樣,但是類型不同
int ADD(int left, int right) { return left + right; } double ADD(double left, double right) { return left + right; } long ADD(long left, long right) { return left + right; }
它們的類型分別是int,double,long。
而且個(gè)數(shù)不同也能構(gòu)成函數(shù)重載。
下面來打印玩一下(剛開始玩打印很正常,但是工作中很少用)
int main(void) { cout << ADD(1,2) << endl; cout << ADD(1.2, 2.2) << endl; cout << ADD(40l, 40l) << endl; return 0; }
結(jié)果:
感覺是調(diào)用的是一個(gè)函數(shù),但其實(shí)不止一個(gè),因?yàn)檫@個(gè)函數(shù)被重載了,所以有三層定義。
實(shí)際上調(diào)用的是
1:int類型的
2:double類型的
3:long類型的。
一些其他問題
缺省算不算重載 ?
//NO.1 int ADD(int left, int right) { return left + right; } //NO.2 int ADD(int left = 1, int right = 2) { return left + right; }
注意 : NO.1和NO.2兩個(gè)不算重載,因?yàn)闃?gòu)成重載的條件是參數(shù)的類型不同或者個(gè)數(shù)不同,以上均不滿足 。重載只看類型
但是
//NO.2 int ADD(int left = 1, int right = 2) { return left + right; } //NO.3 double ADD(double left, double right) { return left + right; }
NO.2和NO.3是構(gòu)成重載的,因?yàn)闈M足了重載的條件
函數(shù)重載的要求:函數(shù)名相同,參數(shù)不同(參數(shù)類型不同,參數(shù)個(gè)數(shù)不同)
綜上所述,缺省和重載沒有關(guān)系!
2.1 int和char怎么區(qū)分
int ADD(int left = 10, int right = 20) { return left + right; } char ADD(char left, char right) { return left + right; } int main() { cout << ADD() << endl; //cout << ADD(1,2) << endl; //(1,2)字面量常量, //默認(rèn)給十進(jìn)制,十六進(jìn)制等等,給的整形默認(rèn)算常量 //如果調(diào)用char cout << ADD('1', '2') << endl; //char類型打印,自動(dòng)按%c,字符類型→ → → → → ↓ //傳字符才調(diào)用char類型的 ↓ // ↓ //char類型的字符只是顯示表面,深入剖析的話在內(nèi)存中,它存儲(chǔ)在4byte中,是它對應(yīng)的ASCII碼值 ↓ //ASCII碼值還是整形,只不過是1byte ↓ //char類型存的值是‘49',‘50'. ← ← ← ← ← ← ← ← ← ← ← ← ← ← //對應(yīng)的是c。c在ASCII碼值中是99 ← ← ← ← ← ← ← ← ← ← ← ← ← ← return 0; }
總結(jié):
1.char和int都是表示整形的,整形一般都是用來表示大小,只不過int是4byte,char是1byte
2.char的1byte是用來表示ASCII碼值的字母,多個(gè)字母可以表示英文,就能表示文字了
2.2 傳值
有三個(gè)值,但是缺省了一個(gè),傳的時(shí)候只傳了兩個(gè)
void lost(int a, int b, int c = 1) { } void lost(int a, int b) { } //以上構(gòu)成函數(shù)重載,函數(shù)名相同,參數(shù)或者個(gè)數(shù)不同 int main() { lost(1, 2, 3); lost(1,2); //↑是編不過去的, return 0; }
總結(jié):
1. 有多個(gè)重載函數(shù)“lost”實(shí)例與參數(shù)列表匹配
2. 編譯器不能識(shí)別要調(diào)用哪一個(gè)“lost”對重載函數(shù)的調(diào)用不明確
3. 構(gòu)成重載但是調(diào)用的時(shí)候埋了一個(gè)坑
到此這篇關(guān)于C++淺析函數(shù)重載是什么的文章就介紹到這了,更多相關(guān)C++函數(shù)重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 中動(dòng)態(tài)鏈接庫--導(dǎo)入和導(dǎo)出的實(shí)例詳解
這篇文章主要介紹了C++ 中動(dòng)態(tài)鏈接庫--導(dǎo)入和導(dǎo)出的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09使用kendynet構(gòu)建異步redis訪問服務(wù)
這篇文章主要介紹了在kendynet上寫的一個(gè)簡單的redis異步訪問接口,大家參考使用吧2014-01-01C++的靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編
本文闡述了靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編的概念和區(qū)別,通過具體實(shí)例分析了實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編的條件,指出了虛函數(shù)是實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編的基礎(chǔ)。2016-03-03C語言中pthread_exit和pehread_join的使用
pthread_exit用于強(qiáng)制退出一個(gè)線程,pthread_join用于阻塞等待線程退出,獲取線程退出狀態(tài),本文主要介紹了C語言中pthread_exit和pehread_join函數(shù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02C++ 數(shù)據(jù)結(jié)構(gòu)之對稱矩陣及稀疏矩陣的壓縮存儲(chǔ)
這篇文章主要介紹了C++ 數(shù)據(jù)結(jié)構(gòu)之對稱矩陣及稀疏矩陣的壓縮存儲(chǔ)的相關(guān)資料,這里實(shí)現(xiàn)稀疏矩陣和對稱矩陣的壓縮存儲(chǔ)的實(shí)例,需要的朋友可以參考下2017-08-08