C++函數的重載
定義
在同一個範圍中,函數名相同,函數的參數列表不同的函數之間構成重載關係,在不同範圍中的同名函數遵循標識符隱藏的原則
ATTENTION:重載與函數的傳回值類型無關,因為聲明一個函數不需要傳回型別,所以無法用來區分哪個函數
常函數和普通成員函數之間構成重載,重載時常對象調用常成員函數,一般對象調用一般成員函數
class A{ … public: void getVal()const{…} void getVal(){…}};int main(){ const A a; A b; a.getVal(); //常函數 b.getVal(); //普通成員函數}
不同namespace中的函數也可以通過名字空間指令/名字空間聲明的方式讓他們在同一個範圍,進而構成重載關係
//overloaded functions in different namespaces
#include<iosteam>using namespace std;namespace ns1{ void fa(int i){cout<<"in ns1:i="<<i<<endl;}}namespace ns2{ void fa(double d){cout<<"in ns2:i="<<d<<endl;}}int main(){ //使用namespace 指令的方式 using namespace ns1; using namespace ns2; fa(10); fa(3.14); return 0;}
重載匹配原則
完全符合>常量轉換/常量匹配>升級轉換>標準轉換>自訂轉換>省略符號匹配
Note:編程中,盡量做到完全符合,如果實在不能完全符合,一般會根據上述原則進行選擇
重載原理
C++編譯器是通過對函數進行換名,將參數列表資訊體現在底層函數名中,從而實現函數的重載,彙編函數名按照 <範圍+傳回型別+函數名+參數列表> 的方式體現在彙編中,eg:_Z4showii:
感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!