欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > 函数指针和函数对象详解

函数指针和函数对象详解

日期:2023-09-30 18:56

1。函数指针

在C++中,指针本质上是内存中的地址。如果内存地址中存放的是某个数据,那么这个指针就是普通数据指针。如果这个内存地址中存放的是某个函数,那么这个指针就是函数指针。
C++ 中的每个函数都有一个入口地址。入口地址是函数指针指向的内存地址。一旦有了指向函数的指针变量,就可以使用这个函数指针变量来调用函数。如果使用数据指针变量 可以作为它所指向的数据来引用。
C++代码编译后,每个函数都有一个入口地址,函数名代表这个入口地址。

函数指针声明语法:
函数返回值类型标识符(指针变量名)(形参列表)
例如:
取消打印密码( int nScore);
如果要声明指向该函数的函数指针,则:
void (*pPrintFunc)(int nScore);
void (*pPrintFunc)(int); //省略形参名称

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

函数指针的使用:
1。使用函数指针来简化调用函数的过程
通过将不同的函数赋值给函数指针,最终统一调用函数指针变量,达到统一。接口调用不同函数的目的是为了简化函数调用过程;
2。使用函数指针实现回调函数

2。函数对象

函数对象(函子或函数对象)
#include
函数对象也称为函子。
所谓函数对象,就是定义了函数调用操作符(function-call operator),即operator()的普通类的对象。
函数对象将函数封装在对象中(实际上是定义一个重载operator()的公共类),这样就可以将其作为参数传递给适当的STL算法,从而扩展算法的功能。
函数对象是设计为具有与函数类类似的功能的对象。在C++中,这可以通过在类中定义成员函数operator()来实现。
定义完函数对象类后,就可以开始使用函数对象类创建相应的函数对象,并使用这些函数对象进行具体的计算。函数对象作为特定类的实例变量,可以单独使用,也可以像函数指针一样作为参数传递给其他函数并在其他函数中使用。
https://www.introzo.com/a20102110080212/article/details/11675497?readlog
用户可以定义自己的函数对象。让我们定义一个我们自己的函数对象。

#包括
使用 命名空间 std结构int_max{

int 运算符()(int x,int y){返回 x>y?x:y ; }

};//operator()重载了“()”,(int x,int y)为参数列表

intmain()
{
    cout<3,4)<返回0;
}

这里的int_max()是一个函数对象。 struct关键字也可以用class代替,但是struct默认具有public访问权限,而class定义了默认的private访问权限。让我们定义一个STL风格的函数对象:

关灯