c++在类中定义函数指针数组以及初始化和调用
在c中可以如下写法(参考:代码连接):
#include <stdio.h>int add(int a,int b){return a+b;
}
int sub(int a,int b){return a-b;
}
int mul(int a,int b){return a*b;
}
int div(int a,int b){return a/b;
}
void make_menu(){printf("****************************\n");printf("请选择菜单:\n");printf("1:加 2:减 3:乘 4:除 0:退出 \n");
}
/*定义函数指针数组变量
(int,int) 对应于函数指针数组 指向的函数列表
*/
int (*fun_array[4]) (int,int) = {add, sub, mul, div};int main(){int i,j;int cmd;while(1){make_menu();scanf("%d",&cmd);if(cmd==0){break;}if(cmd>=1&&cmd<=4){printf("请输入2个数字:");scanf("%d%d",&i,&j);//通过函数指针数组去调用对应的函数int result = fun_array[cmd-1](i,j); //等同于 int result = (*fun_array[cmd-1])(i,j);//通过函数指针变量来调用对应的函数//int (*p)(int,int) = fun_array[cmd-1];//int result = p(i,j);printf("result:%d\n",result);}}return 0;
}
int (*fun_array[4]) (int,int) = {add, sub, mul, div};直接定义函数指针数组以及赋值。
在c++中可以如下写法(参考:代码链接):
.h文件
class Test
{private:typedef void(*func)(void);func funcPtr[2];public:Test();~Test();static void func1(void);static void func2(void);
};
.cpp文件:
Test::Test()
{funcPtr[0] = func1;funcPtr[1] = func2
}
void Test::func1(void) {}
void Test::func2(void) {}
...
这里func1和func2必须是静态的。
因为如果不加static则这两个func1和func2函数属于每一个对象,也就是你每创建一个test类的对象那么这个对象就有func1和func2。
换句话说也就是只有test类的对象的func1和func2的地址是确定的,这样funcPtr[0] = func1这个赋值是不可以的,只能是funcPtr[0] = 某个对象.func1。
而如果你加上了static关键字,那这个函数是所有对象共有的,相当于全局函数,编译完之后他的地址就是操作系统分配好了而不需要创建对象来给他分配地址。所以可以funcPtr[0] = func1这样来赋值。
c++在类中定义函数指针数组以及初始化和调用相关推荐
- Qt类中使用函数指针数组
声明函数指针类型 typedef void (MainWindow::*pFuns)(void); 函数声明 void test1(): void test2(): 数组定义并赋值 pFuns tes ...
- 怎样定义函数指针数组
如果一个指针指向某个函数,那么它便是函数指针.有时候我们如果需要在一个循环中,每次调用不同的函数(这些函数的返回值和参数相同,函数名不同,实现不同),那么就可以使用函数指针数组来使代码更加简练和易读. ...
- C语言结构体中定义函数指针详解
C语言结构体中定义函数指针详解 结构体指针函数应用场景之一--驱动程序编写 结构体的一些基本用法 形式1:先定义结构体类型,再定义变量 形式2:在定义类型的同时定义变量 形式3:直接定义变量,用无名结 ...
- C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。
指针函数 指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针. 声明一个指针函数 int* fun(int x,int y); 例子 typedef struct _Data{ ...
- c语言中结构体类型定义的函数指针,结构体中定义函数指针
结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...
- 结构体中定义函数指针
结构体指针变量的定义,定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;- }; struct 结构体标识符 *指针变量名; 变量初始化 ...
- Python的类中定义函数的三种方式及其利用
类中方法/函数: 普通方法 直接定义(含self) 类方法 @classmethod 静态方法 @staticmethod 类中变量: 静态变量 普通变量 定义在构造函数中(__init__) 看代码 ...
- C语言中函数指针数组的初始化和使用
不比多说上一个代码,就懂了! 代码一: #include <stdio.h> int func(int i) { printf("%d\n",i); retur ...
- C++函数指针数组的使用方法
2015-11-24 一. 缘起 什么情况下,想到将函数指针数组来的呢?是由于近期写的一个程序中,有一系列顺序化的函数,且这些函数的形式基本一致,需要对每一步的执行结果进行判断,是否执行成功,若执 ...
最新文章
- IT部门在企业信息化中的转变
- 【数据科学系统学习】机器学习算法 # 西瓜书学习记录 [6] 朴素贝叶斯实践
- 深度复盘 | 滴滴专车会员项目如何做好设计优化
- 面向对象编程(十五)——抽象类和接口
- WP7 开发(九) WP7控件开发(六)-DeepZoom技术
- 手机移动防卫盾安全需求分析文档
- 爱情二十九课,驾驭爱情
- css-modules,CSS Modules 方案
- 风云再起-后IOE时代的Oracle架构变迁与创新-V3
- heavy dark--读《《暗时间》》
- 一个在华为工作十年的大牛 历程
- Mac-录屏软件-视频转gif动图
- SketchUp Pro 2017 简体中文版的安装与破解
- m3u8播放器 android,在android中播放m3u8视频
- 数据管理平台(DMP)
- java架构图软件,如何画好IT项目中的各种架构图
- “三色河内塔”算法(三色汉诺塔)
- esp32 spi 驱动 oled 屏显示来自 PC 的画面
- 美国公募基金业60年来的十大巨变,预示了中国基金业的未来
- Qt - MQTT客户端调试助手