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

news2024/11/24 7:59:00

文章目录

  • 一、函数指针回顾
    • 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 . . .

在这里插入图片描述





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




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 . . .

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

判断计算机处理器的大小端

一、什么是大小端&#xff1f; 大端模式&#xff1a;低位字节存在高地址&#xff0c;高位字节存在低地址 小端模式&#xff1a;高位字节存在高地址&#xff0c;低位字节存在第地址 二、如何判断计算机处理器是大端还是小端&#xff1f; ①使用变量 x 的值本身来检查处理器存储…

九章云极DataCanvas公司参与大模型重点项目合作签约,建设产业集聚区

9月3日&#xff0c;2023中国国际服务贸易交易会石景山国际开放合作论坛在石景山首钢园成功举办&#xff0c;北京市委常委、常务副市长夏林茂&#xff0c;商务部服务贸易和商贸服务业司司长王东堂&#xff0c;北京市石景山区委书记常卫出席论坛并致辞。论坛期间正式举行“石景山…

关于内涝积水的那些事儿

内涝积水是指城市区域在强降雨、排水系统失效或不足的情况下&#xff0c;大量降雨无法及时排除而积聚在地面上的现象。内涝积水不仅给城市环境和居民的生活带来困扰&#xff0c;同时也给社会经济、交通运输和居民安全造成了严重的危害。 内涝积水的影响 1.内涝积水会对城市环境…

亚马逊鲲鹏系统有哪些优势特点

亚马逊鲲鹏系统是一款全自动化操作的软件&#xff0c;有批量注册账号、自动养号、点击广告、根据关键词进行加购、下单购买、留评、评论点赞或举报、QA等&#xff0c;是一款功能比较齐全的软件。 亚马逊鲲鹏系统有以下优势特点&#xff1a; 1.功能齐全 亚马逊鲲鹏系统一套软件…

【买华为云产品,返CSDN余额红包】,快来薅羊毛!

华为云828营销季火热进行中&#xff0c;9月15日前首次购买华为云产品官网任意一款产品&#xff0c;可获得相应比例的CSDN红包。 热门产品云服务器、域名、商标、主机安全等产品都在其中&#xff0c;任君挑选。 活动优惠价购买后还是获得相应比例余额红包&#xff0c;实际付费金…

nodejs+vue+elementui高校人事管理系统

总体设计 根据高校人事管理系统的功能需求&#xff0c;进行系统设计。 用户功能&#xff1a;用户进入系统可以实现首页、个人中心、职称申报管理、工资信息管理、绩效信息管理、奖惩信息管理、招聘管理等进行操作&#xff1b; 院长功能&#xff1a;院长进入系统可以实现首页、个…

用通俗易懂的方式讲解大模型分布式训练并行技术:概述

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

vue中实现签名画板

特意封装成了一个组件&#xff0c;签名之后会生成一张图片 signBoard.vue <template><el-drawer title"签名" :visible.sync"isShowBoard" append-to-body :show-close"false" :before-close"closeBoard" size"50%&quo…

一文1000字彻底搞懂Web测试与App测试的区别

总结分享一些项目需要结合Web测试和App测试的工作经验给大家&#xff1a; 从功能测试区分&#xff0c;Web测试与App测试在测试用例设计和测试流程上没什么区别。 而两者的主要区别体现在如下几个方面&#xff1a; 1 系统结构方面 Web项目&#xff0c;B/S架构&#xff0c;基于…

网络请求流程简述

二层通信 通过 ARP 获取 MAC通过 MAC 确定目标进行通信 相同 vlan&#xff0c;不跨交换机 相同 vlan&#xff0c;跨交换机 不同 vlan

二进制搭建kubernetes

二进制搭建kubernetes 一、常见的K8S部署方式1.Minikube2.Kubeadmin3.二进制安装部署 二、二进制搭建K8S(单台master)1.部署架构规划2.系统初始化配置3.部署 docker引擎4.部署 etcd 集群4.部署 Master 组件5.部署 Worker Node 组件6.部署网络组件 三、负载均衡部署1.配置load b…

44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示例--网上有些说法好像是错误的

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

免费教学自制产品图册的方法

制作一个精美的产品图册可以帮助我们更好地展示产品的特点和优势&#xff0c;吸引潜在客户的注意力。而使用免费的工具和资源来制作图册&#xff0c;不仅可以节省成本&#xff0c;还能提高效率。 首先&#xff0c;我们需要选择一个适合的设计工具。例如FLBOOK在线制作电子杂志平…

包管理工具--》yarn的配置及使用

包管理工具系列文章目录 一、包管理工具--》npm的配置及使用&#xff08;一&#xff09; 二、包管理工具--》npm的配置及使用&#xff08;二&#xff09; 目录 &#x1f31f;yarn 简介 &#x1f31f;yarn 的核心命令 初始化 安装 脚本和本地CLI 查询 更新 卸载 &…

Redis:StringRedisTemplate简介

&#xff08;笔记总结自b站黑马程序员课程&#xff09; 为了在反序列化时知道对象的类型&#xff0c;JSON序列化器会将类的class类型写入json结果中&#xff0c;存入Redis&#xff0c;会带来额外的内存开销。 为了减少内存的消耗&#xff0c;我们可以采用手动序列化的方式&am…

Python之列表操作和内存模型

Python之列表操作和内存模型 列表list 一个排列整齐的队伍&#xff0c;Python采用顺序表实现 列表内的个体称作元素&#xff0c;由若干元素组成 列表 元素可以是任意对象(数字、字符串、对象、列表等) 列表内元素有顺序&#xff0c;可以使用索引 线性的数据结构 使用 [ ] …

Spring - Cloud (微服务)

SpringCloud 和 SpringBoot 版本选择对应&#xff1a; 版本对应&#xff1a;https://start.spring.io/actuator/info Cloud官网&#xff1a;Spring Cloud 中文网&#xff1a;Spring Cloud中文网-官方文档中文版 在官网可以查看 当前Cloud 推荐的Boot版本&#xff1a; 当前技术…

Yolov8-pose关键点检测:模型轻量化创新 | 轻量级Slim-Neck

💡💡💡本文解决什么问题:轻量级Slim-Neck,缓解 DSC 缺陷对模型的负面影响,并充分利用深度可分离卷积 DSC 的优势。 Slim-Neck | mAP50从0.921提升至0.93, mAP50从0.697提升至0.829 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_1…

从0到1构建界面设计系统思维

用户界面&#xff08;UI&#xff09;是人与机器之间发生交互的载体&#xff0c;也是用户体验&#xff08;UX&#xff09;的一个组成部分。用户界面由两个主要部分组成&#xff1a;视觉设计&#xff08;即传达产品的外观和感觉&#xff09;和交互设计&#xff08;即元素的功能和…

超详解| Yolov8模型手把手调参 | 配置 | 模型训练 | 验证 | 推理

YOLOv8是一款前沿、最先进&#xff08;SOTA&#xff09;的模型&#xff0c;基于先前YOLO版本的成功&#xff0c;引入了新功能和改进&#xff0c;进一步提升性能和灵活性。 然而&#xff0c;要充分发挥Yolov8的潜力&#xff0c;合理的参数配置是至关重要的。本文将带您深入了解…