C++函數重載詳解及執行個體代碼_C 語言

來源:互聯網
上載者:User

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:

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.