【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

2023-10-15 16:50:53 浏览数 (1)

博客总结 :
  • 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;
  • 判定标准 : 只有 函数参数 的 个数 / 类型 / 顺序 的不同 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;
  • 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ;
  • 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型 , 自动匹配 重载函数 ;

一、函数指针定义方法

先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;

代码语言:javascript复制
// 定义一个函数
int add(int a, int b) {
	return a   b;
}

1、直接定义函数指针

按照下面的 函数指针 语法 , 定义函数指针 ;

" 函数指针 " 定义语法 :

代码语言:javascript复制
return_type (*func_ptr)(parameter_list);
  • return_type : 函数指针 指向的函数 的 返回值类型 ;
  • func_ptr : 函数指针 名称 , 使用该 名称 也可以调用函数 , 用法与函数名相同 ;
  • parameter_list : 函数指针 指向函数 的 参数列表 ;

直接使用 函数指针 定义语法 , 定义 函数指针 ;

代码语言:javascript复制
	// 直接定义 函数指针
	int (*func3)(int a, int b) = add;

2、通过 函数类型 定义 函数指针

首先 , 使用 typedef 关键字 , 定义 函数类型 , 下面的代码 定义了 函数类型 func , 函数的 参数列表是 2 个 int 参数 , 返回值是 int ;

代码语言:javascript复制
// 定义函数类型 func , 参数列表是 2 个 int 参数 , 返回值是 int
typedef int (func)(int a, int b);

然后 , 通过定义的 func 函数类型 , 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ;

代码语言:javascript复制
	// 根据 函数类型 定义 函数指针
	func* func1 = add;

3、通过 函数指针类型 定义 函数指针

首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数 , 返回值是 int ;

代码语言:javascript复制
// 定义函数指针类型 func_ptr , 参数列表是 2 个 int 参数 , 返回值是 int
typedef int (*func_ptr)(int a, int b);

然后 , 通过 func_ptr 函数指针类型 , 定义 函数指针 , 直接使用 变量类型 变量名称 的方式定义 函数指针 ;

代码语言:javascript复制
	// 根据 函数指针类型 定义 函数指针
	func_ptr func2 = add;

4、代码示例 - 不同方式定义函数指针

在下面的代码中 , 分别使用上述章节中讲解的三种方式 , 定义了函数指针 ;

代码示例 :

代码语言:javascript复制
// 包含 C   头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

// 定义函数类型 func , 参数列表是 2 个 int 参数 , 返回值是 int
typedef int (func)(int a, int b);

// 定义函数指针类型 func , 参数列表是 2 个 int 参数 , 返回值是 int
typedef int (*func_ptr)(int a, int b);

// 定义一个函数
int add(int a, int b) {
	return a   b;
}

int main()
{
	// 根据 函数类型 定义 函数指针
	func* func1 = add;

	// 根据 函数指针类型 定义 函数指针
	func_ptr func2 = add;

	// 直接定义 函数指针
	int (*func3)(int a, int b) = add;

	// 打印 调用结果 
	cout << "func1(1, 2) = " << func1(1, 2)
		<< " , func2(1, 2) = " << func2(1, 2)
		<< " , func3(1, 2) = " << func3(1, 2) << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
    return 0;
}

执行结果 : 三种方式定义的函数指针都成功

代码语言:javascript复制
func1(1, 2) = 3 , func2(1, 2) = 3 , func3(1, 2) = 3
Press any key to continue . . .

0 人点赞