函数指针和函数对象详解

导读:本篇文章讲解 函数指针和函数对象详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、函数指针

在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 风格的函数对象:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/121303.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!