函數重載
定義:
用同一個函數名定義不同的函數,當函數名和不同的參數搭配時函數的含義不同
注意事項:
重載函數在本質上是相互獨立的不同函數(靜態鏈編)
重載函數的函數類型是不同的
函數返回值不能作爲函數重載的依據
函數重載是由函數名和參數列表決定的
函數重載至少滿足下面的一個條件:
參數個數不同
參數類型不同
參數順序不同
代碼示例:
int func(int x)
{
return x;
}
int func(int a, int b)
{
return a + b;
}
int func(int a,int b,int c){
return a+b+c;
}
函數重載+函數默認參數
可能造成二義性:
代碼示例:
int func(int a, int b, int c = 0)
{
return a * b * c;
}
int func(int a, int b)
{
return a + b;
}
如果我使用一下代碼就會產生二義性,無法通過:
c = func(1, 2);
因爲由於有函數默認參數的存在,func(1,2)對於調用那個函數無法確定
函數重載和函數指針結合
函數指針:
函數具有可賦值給指針的物理內存地址,一個函數的函數名就是一個指針,它指向函數的代碼。一個函數的地址是該函數的進入點,也是調用函數的地址。函數的調用可以通過函數名,也可以通過指向函數的指針來調用。函數指針還允許將函數作爲變元傳遞給其他函數。
定義方式:
類型 (*指針變量名)(參數列表)
代碼示例:注意區分指針函數與函數指針
函數指針:
int (*p) (int i,int j);
指針函數:
int *p(int i,int j){}
函數重載與函數指針
當使用重載函數名對函數指針進行賦值時
根據重載規則挑選與函數指針參數列表一致的候選者
嚴格匹配候選者的函數類型與函數指針的函數類型
代碼示例:
int func(int a, int b)
{
return a + b;
}
int func(char a,char b){
return (a-'0')+(b-'0');
}
int (* PFUNC)(int a,int b);
int c=0;
PFUNC =func;
根據參數列表來選擇執行那個函數
c=PFUNC(10,20);
後續更新:
函數重載
函數重寫
函數重定義
參考博客:
https://blog.csdn.net/str999_cn/article/details/78591369