1.概念:同意作用域的一組引數串列不同,函式名相同的函式,這組函式叫函式多載(C語言是不能定義相同名稱的函式,但是C++可以允許定義),
2作用:多載函式通常來命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的污染,對于程式的可讀性有著很大的好處(一物多用),引數串列不同:1.引數型別不同 2.引數順序不一樣 3.引數個數不同 ;多載版本根據引數匹配度進行選擇(根據不同的情況函式多載會有不同)當我傳入兩個double型的資料,我們又定義幾個不同型別的引數,最后還是會選擇double型別的多載,
注意:
1.1 與函式引數的變數名無關
1.2 函式的回傳值型別與多載無關
2.函式多載的實作原理是通過C++實作的extern “C” int fun()(沒有形成換名)的形式可以c的方式生成函式名(無換名機制)
3.使用場景:當函式基本上執行相同的任務的時候,使用不同形式的資料時
我知道概念很難懂又晦澀,我也一樣,看下面這個特別簡單的代碼你會發現多載其實很好理解:
#include<iostream> using namespace std; namespace Chongzai_one{ void add(int a,int b){ cout<<"int+int="<<a+b<<endl; } void add(int a,double b){ cout<<"int+double="<<a+b<<endl; } void add(double a,double b){ cout<<"double+double="<<a+b<<endl; } }//函式名相同,引數串列不同是因為他們的引數型別不同 int main(){ using namespace Chongzai_one; add(1,2);//得到的結果為3 add(1,2.5);//得到的結果為3.5 add(2.3,2.3);//得到的結果為4.6 getchar(); return 0; }
看懂了吧,這三個add函式它們的功能都是加法只是引數型別不同,如果用不同的名字反而會影響程式的可讀性,當然你想寫成字串形式也是可以的(PS:下面n+m最后會顯示的是字符ASCLL的合)看下面代碼:
namespace Chongzai_two{ void print(char n){ cout<<"show1="<<n<<endl; } void print(char n,char m){ cout<<"show2="<<n+m<<endl; } }
引數型別相同或者回傳型別不同但引數型別相同都是不會形成多載的,如果我把第一個代碼中的第一個多載函式的void改成int,把引數型別換成和第二個多載函式一樣那么它就會報錯,當出現extern "C" int fun();的時候,則是用C語言運行程式,此時的函式名將不會改變,例如下面這個代碼:
extern "C" int fun(int a,int b){ cout<<"a+b="<<a+b<<endl; } int fun(double a,double b){ cout<<"a+b"<<a+b<<endl; }
其實這個代碼并沒有變更函式名,啟動后臺程式發現還是會有兩個fun函式,這就是extern在這里的用法,此外extern還可以作為呼叫同一個工程下其他檔案內的命名空間,這里只是簡單的介紹了一下,以后還會在博客里會重點介紹函式的用法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67308.html
標籤:C++
上一篇:圖論初步<蒟蒻專屬文章>
