首页 > 编程语言 >【C++】函数重载 ③ ( 为函数指针赋值重载函数 )

【C++】函数重载 ③ ( 为函数指针赋值重载函数 )

时间:2023-10-02 12:06:39浏览次数:38  
标签:函数 int add func 重载 函数指针 赋值



文章目录

  • 一、函数指针回顾
  • 1、函数指针概念
  • 2、函数指针语法
  • 3、代码示例 - 函数指针示例
  • 二、为函数指针赋值重载函数
  • 1、为函数指针赋值重载函数
  • 2、代码示例 - 为函数指针赋值重载函数




博客总结 :

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





一、函数指针回顾




1、函数指针概念



之前的博客 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读) 六. 函数指针 章节中 , 详细介绍了 函数指针 , 以及 函数指针 与 数组 , 其它指针 结合的 复杂指针如何进行解读 ;



" 函数指针 " 是一种 指向函数的指针 , 表示的是 函数地址 , 其指向 函数 而不是 内存数据 ;

借助 " 函数指针 " 可以用来调用函数 ;

" 函数指针 " 也可以 作为函数的 参数 ;



2、函数指针语法



" 函数指针 " 定义语法 :

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


" 函数指针 " 示例 : 下面的 函数指针 p 指向一个函数 , 函数的参数是 2 个 int 类型参数 , 函数的返回值是 int 类型 ;

int (*p)(int, int);



3、代码示例 - 函数指针示例



定义 int (*)(int, int) 类型的函数指针 , 将如下函数赋值给函数指针

int add(int a, int b) {
	return a + b;
}

可以将 add 直接赋值给函数指针 ,

也可以先使用 & 符号获取 函数地址 &add , 然后再赋值给函数指针 ;

// 定义 函数指针 , 将函数地址赋值给 函数指针
	int (*func_ptr)(int, int) = add;
	int (*func_ptr2)(int, int) = &add;

上述两种赋值都是正确的 , 通过 func_ptr(1, 2) 和 func_ptr2(1, 2) 代码 , 都可以调用到函数 ;



函数指针完整代码示例 :

// 包含 C++ 头文件
#include "iostream"

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

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

int main()
{
	// 定义 函数指针 , 将函数地址赋值给 函数指针
	int (*func_ptr)(int, int) = add;
	int (*func_ptr2)(int, int) = &add;

	// 打印 调用结果 
	cout << "func_ptr(1, 2) = " << func_ptr(1, 2) 
		<< " , func_ptr2(1, 2) = " << func_ptr2(1, 2) << endl;

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

执行结果 :

func_ptr(1, 2) = 3 , func_ptr2(1, 2) = 3
Press any key to continue . . .

【C++】函数重载 ③ ( 为函数指针赋值重载函数 )_c++






二、为函数指针赋值重载函数




1、为函数指针赋值重载函数



对 函数指针 进行赋值时 , 直接将 函数名 赋值给了 函数指针 ;

如 下面的代码中 , 直接将 add 函数赋值给了 函数指针 func_ptr ;

int (*func_ptr)(int, int) = add;

如果 代码中 定义了多个 add 重载函数 , 那么 使用 重载函数 对 函数指针 进行赋值 , 就需要进行类型匹配了 ;



使用 int (*func_ptr)(int, int) 代码 , 定义的 函数指针 有 2 个 int 类型的参数 , 有 1 个 int 类型的返回值 ;

为该函数指针 赋值 add 函数 时 , 就会自动 查找 参数列表是 2 个 int 类型的函数 ,

  • 如果没有找到 , 就会编译失败 ,
  • 如果找到了 , 为函数指针赋值成功 ;


2、代码示例 - 为函数指针赋值重载函数



完整代码示例 :

// 包含 C++ 头文件
#include "iostream"

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

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

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

int main()
{
	// 定义 函数指针 , 将函数地址赋值给 函数指针

	// 对函数指针进行赋值时 , 会根据函数指针的类型匹配 add 函数
	// 显然会匹配到 int add(int a, int b) 函数的地址
	int (*func_ptr)(int, int) = add;

	// 对函数指针进行赋值时 , 会根据函数指针的类型匹配 add 函数
	// 显然会匹配到 int add(int a, int b, int c) 函数的地址
	int (*func_ptr2)(int, int, int) = add;

	// 打印 调用结果 
	cout << "func_ptr(1, 2) = " << func_ptr(1, 2) 
		<< " , func_ptr2(1, 2) = " << func_ptr2(1, 2, 3) << endl;

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

执行结果 :

func_ptr(1, 2) = 3 , func_ptr2(1, 2) = 3
Press any key to continue . . .

【C++】函数重载 ③ ( 为函数指针赋值重载函数 )_原力计划_02


标签:函数,int,add,func,重载,函数指针,赋值
From: https://blog.51cto.com/u_14202100/7682516

相关文章

  • 44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示
    文章目录Flink系列文章一、模块Modules1、模块介绍2、模块类别ModuleTypes1)、CoreModule2)、HiveModule3)、User-DefinedModule3、模块生命周期和解析顺序ModuleLifecycleandResolutionOrder4、模块Modules的使用1)、SQL方式2)、编码方式-java二、HiveFunctions内置函数和自定......
  • 5.go语言函数提纲
    1本篇前瞻前端时间的繁忙,未曾更新go语言系列。由于函数非常重要,为此将本篇往前提一提,另外补充一些有关go新版本前面遗漏的部分。需要恭喜你的事情是本篇学完,go语言中基础部分已经学完一半,这意味着你可以使用go语言去解决大部分的Leetcode的题,为此后面的1篇,将带领大家去巩固go语......
  • mysql中find_in_set()函数的使用及in()用法详解
    MySQL手册中find_in_set函数的语法解释:FIND_IN_SET(str,strlist)str要查询的字符串strlist字段名参数以”,”分隔如(1,2,6,8,10,22)查询字段(strlist)中包含(str)的结果,返回结果为null或记录假如字符串str在由N个子链组成的字符串列表strlist中,则返回值的范围在1到N之间......
  • mysql中find_in_set()函数的使用及in()用法详解
    MySQL手册中find_in_set函数的语法解释:FIND_IN_SET(str,strlist)str要查询的字符串strlist字段名参数以”,”分隔如(1,2,6,8,10,22)查询字段(strlist)中包含(str)的结果,返回结果为null或记录假如字符串str在由N个子链组成的字符串列表strlist中,则返回值的范围在1到N之间......
  • 前端JSON.stringify,JSON.parse函数
    JSON.stringify将对象转为JSON字符串;JSON.parse将JSON字符串转为对象;对象:{productId:129}JSON字符串:"{\"productId\":129}"***JSON使用场景***1. localStorage/sessionStorage存储对象  localStorage/sessionStorage只可以存储字符串,当我们想存储对象的时候,需要使用JSON.s......
  • 无涯教程-JavaScript - WEBSERVICE函数
    描述WEBSERVICE函数从Internet或Intranet上的Web服务返回数据。语法WEBSERVICE(url)争论Argument描述Required/OptionalurlTheURLofthewebservice.RequiredNotes如果参数无法返回数据,则WEBSERVICE返回#VALUE!错误值。如果参数导致一个无效的字符串或包......
  • 无涯教程-JavaScript - ENCODEURL函数
    描述ENCODEURL函数返回URL编码的字符串。语法ENCODEURL(text)争论Argument描述Required/OptionalTextAstringtobeURLencoded.Required适用性Excel2013,Excel2016Example参考链接https://www.learnfk.com/javascript/advanced-excel-statistical-encode......
  • 无涯教程-JavaScript - UPPER函数
    描述UPPER函数将文本转换为大写。语法UPPER(text)争论Argument描述Required/OptionalText您要转换为大写的文本。文本可以是引用或文本字符串。Required适用性Excel2007,Excel2010,Excel2013,Excel2016Example参考链接https://www.learnfk.com/javascri......
  • 无涯教程-JavaScript - UNICODE函数
    描述UNICODE函数返回与文本的第一个字符相对应的数字(代码点)。语法UNICODE(text)争论Argument描述Required/OptionalTextTextisthecharacterforwhichyouwanttheUnicodevalue.RequiredNotes如果文本包含部分替代或无效的数据类型,则UNICODE返回#VALUE!......
  • 为什么在es6中继承必须调用super函数?
    在ES6中规定,子类的构造函数必须要执行super函数图片查阅自阮一峰ES6教程super()函数有什么作用?在执行super函数时,其实就是在创建子类的this,然后将父类的实例和方法放置在这个this对象中,子类在调用super之前是没有this的,所有的this操作都要在super()关键字后执行......