C++函數(shù)重載的細節(jié)圖文詳解
前言:如果不想看論證,可以直接點擊總結(jié),跳轉(zhuǎn)到最后
1、使用重載函數(shù)時,如果數(shù)據(jù)類型不匹配,C++嘗試使用類型轉(zhuǎn)換與形參進行匹配,如果轉(zhuǎn)換后有多個函數(shù)能匹配上,編譯器將報錯;
論證如下:
#include <iostream> using namespace std; void show(short no, string message) { cout << "short 親愛的" << no << "號:" << message << endl; } void show(long no, string message) { cout << "long 親愛的" << no << "號:" << message << endl; } void show(double no, string message) { cout << "double 親愛的" << no << "號:" << message << endl; } int main() { short a = 10; show(a,"我喜歡你"); long b = 10; show(b,"我喜歡你"); double c = 10; show(c,"我喜歡你"); return 0; }
運行:
各自都調(diào)用了自己對應(yīng)的函數(shù),沒有問題;
我們改一下,把long和double的重載函數(shù)注釋掉:
我們定義一個double的變量,看他是否會使用short的show輸出:
成功輸出了,沒有問題,只不過編譯器提示了,double轉(zhuǎn)成short可能會確實精度,不管他
如果我們定義short的變量,調(diào)用double的函數(shù)呢?
也沒有問題,我們發(fā)現(xiàn)了編譯器會幫我們隱士轉(zhuǎn)換;
那么如果我們定義short變量,放開long和double的函數(shù),那么short變量會調(diào)用哪一個呢?
直接報錯,顯示有多個重載函數(shù);
觀點1論證成功!
2、引用可以作為函數(shù)重載的條件,但是,調(diào)用重載函數(shù)的時候,如果實參是變量,編譯器將形參類型的本身和類型引用視為同意特征;
論證如下:
#include <iostream> using namespace std; void show(long no, string message) { cout << "long 親愛的" << no << "號:" << message << endl; } void show(long& no, string message) { cout << "long 親愛的" << no << "號:" << message << endl; } int main() { long c = 10; show(c, "我喜歡你"); return 0; }
調(diào)用函數(shù)時,我們先傳入變量,運行一下:
無法運行,他說函數(shù)有多個重載;因為long和long&都能操作變量c;
如果我們傳入常量呢?
成功的調(diào)用了long,因為不能對常量進行引用;
觀點2論證結(jié)束!
3、如果重載函數(shù)有默認參數(shù),調(diào)用函數(shù)時,可能導(dǎo)致匹配失??;
論證如下:
觀點3論證結(jié)束!
4、const不能作為函數(shù)重載的特征;
論證如下:
觀點4論證結(jié)束!
5、返回值類型不同不能作為函數(shù)重載的特征;
論證如下:
觀點5論證結(jié)束!
總結(jié)
1、使用重載函數(shù)時,如果數(shù)據(jù)類型不匹配,C++嘗試使用類型轉(zhuǎn)換與形參進行匹配,如果轉(zhuǎn)換后有多個函數(shù)能匹配上,編譯器將報錯;
2、引用可以作為函數(shù)重載的條件,但是,調(diào)用重載函數(shù)的時候,如果實參是變量,編譯器將形參類型的本身和類型引用視為同意特征;
3、如果重載函數(shù)有默認參數(shù),調(diào)用函數(shù)時,可能導(dǎo)致匹配失?。?/p>
4、const不能作為函數(shù)重載的特征;
5、返回值類型不同不能作為函數(shù)重載的特征;
到此這篇關(guān)于C++函數(shù)重載的文章就介紹到這了,更多相關(guān)C++函數(shù)重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析為何要關(guān)閉數(shù)據(jù)庫連接,可不可以不關(guān)閉的問題詳解
本篇文章是對為何要關(guān)閉數(shù)據(jù)庫連接,可不可以不關(guān)閉的問題進行了詳細的分析介紹,需要的朋友參考下2013-05-05