函数指针和函数对象详解

一、函数指针

在C++中,指针本质就是内存中的某个地址,如果该内存地址中存放的是某个数据,那么这个指针就是常见的数据指针,如果这个内存地址中存放的是某个函数,那么这个指针就是函数指针。
C++中每一个函数都有一个入口地址,该入口地址就是函数指针所指向的内存地址,有了指向函数的指针变量后,就可以用这个函数指针变量调用函数,如果用数据指针变量可以引用它所指向的数据一样。
C++代码经过编译后,每一个函数都有一个入口地址,而函数名就代表这个入口地址。

函数指针声明语法:
函数返回值类型标识符 (指针变量名)(形参列表)
如:
void PrintPass(int nScore);
如果要声明一个函数指针指向这个函数,则:
void (*pPrintFunc)(int nScore);

void (*pPrintFunc)(int);//省略形参名

函数指针的赋值可以直接通过将函数名赋值给函数指针名完成,也即函数名就是指向函数的指针:
pPrintFunc = PrintPass;

函数指针用处:
1、使用函数指针简化调用函数过程
通过将不同函数对函数指针进行赋值,最终统一调用函数指针变量,实现统一接口调用不同函数的目的,简化函数调用过程;
2、使用函数指针实现回调函数

二、函数对象

函数对象( functor 或者 funtion objects )
#include<functional>
函数对象又称之为仿函数。
所谓函数对象,就是定义了函数调用操作符(function-call operator),即operator()的普通类的对象。
函数对象将函数封装在一个对象(其实是定义一个重载了operator()的普通类)中,使得它可作为参数传递给合适的STL 算法,从而使算法的功能得以扩展。
函数对象是一种设计成具有类似函数功能类的对象。在C++中,这可以在类中定义成员函数operator()来实现。
定义好函数对象类之后,就可以开始使用函数对象类创建相应的函数对象,并利用这些函数对象来进行具体的计算。函数对象作为一个具体的类的实例变量,它既可以单独使用,也可以像函数指针一样被当成参数传递给其他函数,并在其他函数中使用。
https://blog.csdn.net/a20102110080212/article/details/11675497?readlog
用户可以定义自己的函数对象。下面让我们来定义一个自己的函数对象。

#include <iostream>
using namespace std;

struct int_max{

int operator()(int x,int y){return x>y?x:y; }

};//operator() 重载了" ()" , (int x,int y) 是参数列表

int main()
{
    cout<<int_max() (3,4)<<endl;
    return 0;
}

这里的 int_max () 就是一个函数对象, struct 关键字也可以用 class 来代替,只不过 struct 默认情况下是公有访问权限,而 class 定义的是默认私有访问权限。下面我们来定义一个STL 风格的函数对象:

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值