函数重载和函数指针
函数重载:只针对同名函数的形参类型,个数,顺序,不看返回值。
正确重载:
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;
}
输出结果: