C++函数指针
概述:
函数指针简介:
如果作为一个屌丝程序员,未提到函数指针,则对C或C++函数的不尊重;
函数与数据项相似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。通常,这些地址对用户而言,既不重要,也没有什么用处,但是对程序而言,却很有用。例如,可以编写将另一个函数的地址作为参数的函数。这样的一个函数能够找到第二个函数,并运行它。与直接调用另一个函数相比,这种方法很笨拙,但它允许在不同的时间传递不同函数的地址,这意味着可以在不通过的时间使用不同的函数。
函数指针的基础知识:
· 获取函数的地址:
1.只要使用函数名(后面不跟参数即可)。也就是说 test()是一个函数,则 test 就是该函数地址。
2.要将函数作为参数进行传递,必须传递函数名,一定要区分传递的是函数的地址还是函数的返回值。
3.Call(test());//返回值
4.Call(test); //在Call内部可以调用test()函数
· 声明一个函数指针:
1.typedef int (FuncPtr::*pfunc)(int,int);
2.int add(int a,int b);
· 使用函数指针来调用函数:
1.pfunc m_Func;
2.m_Func = &FuncPtr::add;
代码示例:
.h:
#include "FuncPtr.h" #include <QDebug> FuncPtr::FuncPtr(QWidget *parent) : QWidget(parent) { initMap(); pfunc m_Func; m_Func = &FuncPtr::add; (this->*m_Func)(5,5);//大家注意调用时的方法 m_Func = &FuncPtr::sub; (this->*m_Func)(5,5); //map调用方法 (this->*m_Map[1])(10,10); (this->*m_Map[2])(20,20); } FuncPtr::~FuncPtr() { } void FuncPtr::initMap() { //将函数插入到MAP中 m_Map[1] = &FuncPtr::add; m_Map[2] = &FuncPtr::sub; } int FuncPtr::add(int a, int b) { qDebug()<< "add"; return a+b; } int FuncPtr::sub(int a, int b) { qDebug()<< "sub"; return a-b; }
总结:
函数是C++编程中的一个模块。要使用函数,必须定义和原型,并调用该函数;
函数定义是实现函数功能的代码;
函数原型描述了函数的接口;
over:
欢迎大家关注作者在文末评论、点赞、转发以及批评指正!
如果大家有更好的方法或有问题可以在文末评论一起讨论!
共同学习!
共同进步!