【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
文章目录
- 一、函数指针定义方法
- 1、直接定义函数指针
- 2、通过 函数类型 定义 函数指针
- 3、通过 函数指针类型 定义 函数指针
- 4、代码示例 - 不同方式定义函数指针
博客总结 :
- 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;
- 判定标准 : 只有 函数参数 的 个数 / 类型 / 顺序 的不同 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;
- 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ;
- 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型 , 自动匹配 重载函数 ;
一、函数指针定义方法
先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;
// 定义一个函数
int add(int a, int b) {return a + b;
}
1、直接定义函数指针
按照下面的 函数指针 语法 , 定义函数指针 ;
" 函数指针 " 定义语法 :
return_type (*func_ptr)(parameter_list);
- return_type : 函数指针 指向的函数 的 返回值类型 ;
- func_ptr : 函数指针 名称 , 使用该 名称 也可以调用函数 , 用法与函数名相同 ;
- parameter_list : 函数指针 指向函数 的 参数列表 ;
直接使用 函数指针 定义语法 , 定义 函数指针 ;
// 直接定义 函数指针int (*func3)(int a, int b) = add;
2、通过 函数类型 定义 函数指针
首先 , 使用 typedef 关键字 , 定义 函数类型 , 下面的代码 定义了 函数类型 func , 函数的 参数列表是 2 个 int 参数 , 返回值是 int ;
// 定义函数类型 func , 参数列表是 2 个 int 参数 , 返回值是 int
typedef int (func)(int a, int b);
然后 , 通过定义的 func 函数类型 , 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ;
// 根据 函数类型 定义 函数指针func* func1 = add;
3、通过 函数指针类型 定义 函数指针
首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数 , 返回值是 int ;
// 定义函数指针类型 func_ptr , 参数列表是 2 个 int 参数 , 返回值是 int
typedef int (*func_ptr)(int a, int b);
然后 , 通过 func_ptr 函数指针类型 , 定义 函数指针 , 直接使用 变量类型 变量名称 的方式定义 函数指针 ;
// 根据 函数指针类型 定义 函数指针func_ptr func2 = add;
4、代码示例 - 不同方式定义函数指针
在下面的代码中 , 分别使用上述章节中讲解的三种方式 , 定义了函数指针 ;
代码示例 :
// 包含 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;
}
执行结果 : 三种方式定义的函数指针都成功
func1(1, 2) = 3 , func2(1, 2) = 3 , func3(1, 2) = 3
Press any key to continue . . .

相关文章:
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
文章目录 一、函数指针定义方法1、直接定义函数指针2、通过 函数类型 定义 函数指针3、通过 函数指针类型 定义 函数指针4、代码示例 - 不同方式定义函数指针 博客总结 : 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;判定标准 : 只有 函数参数 的 个数 / 类…...
异常-java
目录 一、异常的概念和体系结构 1.1 异常的概念 1.2 异常的体系结构 1.3 异常的分类 二、异常的处理 2.1 防御式编程 2.2 异常抛出 2.3 异常捕获 2.4 异常处理流程 三、自定义异常类 一、异常的概念和体系结构 1.1 异常的概念 程序员在开发过程中,想要将代码写得…...
软件测试/测试开发丨Selenium Web自动化测试 高级控件交互方法
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27045 一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件&am…...
深入Go语言:进阶指南
深入Go语言:进阶指南 欢迎来到深入Go语言的进阶指南。如果你已经熟悉Go语言的基础知识,想要更深入地探索这门语言的高级特性和技巧,那么本篇博客将为你提供有关Go语言的更多深入内容。 Go语言的并发编程 Go语言以其强大的并发支持而闻名。…...
FOXBORO FBM232 P0926GW 自动化控制模块
Foxboro FBM232 P0926GW 是 Foxboro(福克斯博罗)自动化控制系统的一部分,通常用于监测和控制工业过程。以下是关于这种类型的自动化控制模块可能具有的一些常见功能: 数字输入通道: FBM232 P0926GW 控制模块通常具有多…...
【C# Programming】编程入门:方法和参数
一、方法 1、方法的定义 由一系列以执行特定的操作或计算结果语句组成。方法总是和类关联,类型将相关的方法分为一组。 方法名称 形参和实参(parameter & argument)返回值 2、命名空间 一种分类机制,用于组合功能相关的所有类型。命名空间是分级…...
【报错】 Cannot create property ‘showColumn‘ on number ‘-1‘
1、报错原因: 代码如下: 报错是因为:this.findObject(this.option.column, "thirdId")是一个number ,没有.showColumn属性 2、修改代码 将其变成object属性就行了...
C++容器string的运用和注意
介绍 首先,先说明,string在C的string头文件中定义,而在C语言中的字符串就是字符数组,在C中,string容器相当于C语言中的字符数组,string比C语言中的字符数组更为好用,如:C中cin/cout可…...
用对工具,你的全渠道电子商务业务就成功了一半
希望将全渠道电子商务纳入您的业务战略,但不确定从哪里开始?我们为您提供保障。这篇文章将指导您了解全渠道商务的基础知识,以及它与多渠道方法的区别,还将探讨利用全渠道方法的众多好处,并讨论企业如何通过全渠道客户…...
TDengine学习(1):采集量(Metric),标签(label),数据采集点,表,超级表,子表、库
因为TDengine是面向物联网诞生的一种数据库,所以在一些概念的命名上有一点相应的特色。 一、数据采集点 比如需要对一辆高铁上的各种信息进行采集,采集信息存入数据库中。我们可以对高铁车厢内的一些数据进行采集,比如:车厢内温…...
【洛谷 P1029】[NOIP2001 普及组] 最大公约数和最小公倍数问题 题解(辗转相除法)
[NOIP2001 普及组] 最大公约数和最小公倍数问题 题目描述 输入两个正整数 x 0 , y 0 x_0, y_0 x0,y0,求出满足下列条件的 P , Q P, Q P,Q 的个数: P , Q P,Q P,Q 是正整数。 要求 P , Q P, Q P,Q 以 x 0 x_0 x0 为最大公约数,以…...
Golang 中的 errors 包详解:返回自定义 error 类型
之前的文章《Golang 中的 errors 包详解》详细讲解了 errors 包的主要类型和函数,以及它们的使用方法。本文结合之前讲解的知识,来讲解一下根据自己或团队的项目要求如何返回自定义的 error 类型。 为什么需要自定义 error 类型? 在日常开发…...
C#开发的OpenRA游戏之信标按钮
前面已经分析了两个按钮:变卖和维修,接着下来就是分析信标按钮,这个按钮使用是比较少,但是对于多人游戏时,使用这个信号就很方便同盟军过来查看和帮助了,相当于一个朋友之间共同查看的地址。当你经过同盟标记的标志时,就会听到beacon detected,检测到信标,这就是你的盟…...
16字节协议的串口通信
1.协议要求 协议为帧传输,一共16字节。主要是2字节的固定帧头 EB 90,2字节的帧计数(用来计数发出的帧),10字节的数据和2字节的校验位 帧头:2字节,固定值 8’HEB、8’H90 帧计数:2字节,用来说明发出去帧是…...
升哲科技城市级“算力+数字底座”服务亮相2023服贸会
9月2日至6日,以“开放引领发展,合作共赢未来”为主题的2023年中国国际服务贸易交易会在北京隆重举办。作为城市级数据服务商,升哲科技(SENSORO)连续第四年参加服贸会,携城市级“算力数字底座”服务及在城市…...
动态规划之简单多状态
简单多状态 1. 按摩师(easy)2. 打家劫舍II (medium)3. 删除并获得点数(medium)4. 买卖股票的最佳时机含冷冻期(medium)5. 买卖股票的最佳时机III(hard) 1. 按…...
跨数据中心Multi-Fabric解决方案:L2和L3网络的高效连接和扩展
云数据中心里,为什么需要DCI互通? 云化数据中心,网络资源通过虚拟化技术形成资源池,实现业务与物理网络解耦,通过网络虚拟化,物理网络资源可以被分成多个虚拟网络资源,从而提高网络资源的使用效…...
upload-labs靶场通关详解
文章目录 Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20方法一(文件夹名欺骗绕过)方法二(%00截断攻击) Pass-21 Pass-01 绕过…...
Leetcode刷题笔记--Hot41-50
1--二叉树的层序遍历(102) 主要思路: 经典广度优先搜索,基于队列; 对于本题需要将同一层的节点放在一个数组中,因此遍历的时候需要用一个变量 nums 来记录当前层的节点数,即 nums 等于队列元素的…...
「MySQL-02」数据库的操纵、备份、还原和编码规则
目录 一、库操作 1. 创建数据库 2. 查看所有数据库 3. 删除数据库 4. 修改数据库 5. 进入一个数据库 二、查看和设置数据库的编码规则 1. MySQL的两个编码规则:字符集和校验规则 2. 查看MySQL当前使用的字符集以及校验规则 3. 查看MySQL支持的所有字符集 4. 查看MyS…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
