C/C++函数重载和函数指针的用法

函数重载和函数指针

函数重载:只针对同名函数的形参类型,个数,顺序,不看返回值。

正确重载:

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;
}

输出结果:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章