函數重載和函數指針
函數重載:只針對同名函數的形參類型,個數,順序,不看返回值。
正確重載:
void func(int a);
void func(int a,int b);
void func(float a);
void func(float a,float b);
錯誤重載(二義性):
void func(int a,int b);
void func(int a,int b, int c=0);// 有默認形參
使用時候:
func(2,4); // 無法指定是哪個
函數指針
當使用重載函數名對函數指針進行賦值時,根據重載規則挑選與函數指針參數列表一致的候選者,嚴格匹配候選者的函數類型與函數指針的函數類型
測試樣例
#include <iostream>
using namespace std;
//函數重載
void myFunc(char c)
{
printf("char_c:%c \n", c);
}
void myFunc(int c)
{
printf("int_c:%d\n", c);
}
void myFunc(int c,int d)
{
printf("int_c:%d, int_d:%d\n", c,d);
}
void myFunc(char*c)
{
printf("char*_c:%s\n", c);
}
void myFunc(char* c,char* d)
{
printf("char*_c1:%s, char*_c2:%s\n", c,d);
}
void myFunc(string c)
{
printf("lenth_of_string_c: %d\n", strlen(c.c_str()));
}
//聲明一個函數類別:
typedef void(myTypeFunc)(int a, int b);// 針對void myFunc(int a,int b);
//聲明一個函數指針類型:
typedef void(*my_pFunc)(int a, int b);// 針對void myFunc(int a,int b);
//定義一個函數指針變量:
void(*myVarpFunc)(char* a, char* b);
int main()
{
myTypeFunc* type_funcp = NULL;// 定義一個函數指針
my_pFunc pfunc = NULL;
pfunc = myFunc;
type_funcp = myFunc;
myVarpFunc = myFunc;
myFunc(1);
pfunc(2, 4);
type_funcp(3, 6);
{
char c1[] = "this is char1";
char c2[] = "this is char2";
myFunc(string(c1));
myFunc(c2);
myVarpFunc(c1, c2);
}
printf("\n\n");
system("pause");
return 0;
}
輸出結果: