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

輸出結果:
在這裏插入圖片描述

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