重載(Overloading):所謂重載是指不同的函數(shù)實體共用一個函數(shù)名稱。例如以下代碼所提到的CPoint之中,有兩個member functions的名稱同為x():
1 class CPoint{ 2 3 public: 4 float x(); 5 void x(float xval); 6 7 };
?? 其兩個member functions實現(xiàn)代碼如下:
1 float CPoint::x(){return x;} 2 void CPoint::x(float xval){_x=xval;}
函數(shù)名稱相同,但參數(shù)不同(個數(shù)不同,型別也不同),實現(xiàn)代碼也不相同。C++之所以有function overloading的機制,是為了解決因為數(shù)據(jù)類型不同而需要設計多個算法相同,但函數(shù)名不同的函數(shù)代碼的問題。舉個例子,加法就是加法,如果為了int、float、double、long....各設計出對應的AddInt()、AddFloat()、AddDouble()、AddLong()...等加法函數(shù),我們會覺得很煩鎖,不漂亮。如果能夠把它們?nèi)慷冀凶鯝dd(),而我們不管對哪種數(shù)據(jù)類型做加法運算,都呼叫Add()就好,那么就運算層面來看就清爽多了。至于底層機制,則由編譯器根據(jù)Add()所獲得的參數(shù)型別,決定真正該喚起哪一個Add()函數(shù)實體。于是,以加法為例,我們可以設計以下四個同名函數(shù):
1 int Add(int a,int,b); 2 long Add(long a,long b); 3 double Add(double a, double b); 4 float Add(float a,float b);
并這樣使用之:
1 int i=Add(3,5); 2 long l=Add(3L,5L); 3 double d=Add(3.1415926,5.1615926); 4 float f=Add(3.14,5.14);
Function overloading 適用于class member functions (如先前的CPoint::x()),也適用于一般的global functions(如上術(shù)的Add()).
? ? ? ?Function overloading 無法適用于函數(shù)名稱相同,參數(shù)也完全相同,只有返回值不同的情況。這種情況將無法通過編譯,會出現(xiàn)報錯提示:
error?C2556:?'Add' :?overloaded?functions?only?differ?by?return?type
我們已經(jīng)看到了,所謂的function overloading 只不過是讓諸多的函數(shù)實體可以采用相同的函數(shù)名稱,事實上你還是要編寫好幾份不同(但邏輯十分類式)的函數(shù)實現(xiàn)代碼。為了能夠解決因為數(shù)據(jù)類型不同而需要設計多個算法相同,但函數(shù)名不同的函數(shù)代碼的問題,比較好的做法是把參數(shù)看作只有一種類型。C++ Template 可以辦到這一點,我們將在往后的文章來談這個非常棒的主題。文章來源:http://www.zghlxwxcb.cn/news/detail-857026.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-857026.html
到了這里,關(guān)于C++多態(tài)與虛擬:函數(shù)重載(Function Overloading)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!