C++ 函数指针和函数对象的区别与联系

函数指针直接指向函数,而函数对象重载了 operator() 运算符以实现可调用。两者都是 c++++ 函数调用的有用工具,函数指针高效且无状态,函数对象低效但可带状态。在实战中,函数指针常用于排序函数,函数对象则适用于自定义比较函数。

C++ 函数指针和函数对象的区别与联系

C++ 函数指针和函数对象的区别与联系

简介

函数指针和函数对象是 C++ 中实现面向对象编程的两个重要工具。它们都用于调用函数,但工作方式和用途不同。

立即学习“C++免费学习笔记(深入)”;

函数指针

函数指针是保存函数地址的变量。它就像一个指向函数的指针。要调用指向函数的函数指针,只需对其进行解引用即可。

语法:

// 声明一个函数指针类型typedef int (*FunctionPointer)(int);// 指向一个函数的函数指针FunctionPointer funcPtr = &myFunction;// 调用指向函数的函数指针int result = funcPtr(arg);

函数对象

函数对象是一个可调用的类,它重载了 operator() 运算符。函数对象类似于函数,可以传递参数并返回结果。

语法:

// 声明一个函数对象类class MyFunctionObject {public:    int operator()(int arg) {        return arg * 2;    }};// 创建函数对象MyFunctionObject funcObj;// 调用函数对象int result = funcObj(arg);

区别

特征 函数指针 函数对象

语法指向了函数重载了 operator() 运算符类型裸指针类效率高效低效状态无状态可以有状态

联系

虽然函数指针和函数对象的工作方式不同,但它们都是对 C++ 中函数调用的有用的补充。函数指针非常适合低级编程任务,而函数对象则更适合面向对象编程。

实战案例

排序函数中的函数指针:

#include bool compareDescending(int a, int b) {    return a > b;}int main() {    std::vector nums = {1, 3, 5, 2, 4};    // 使用函数指针对向量进行降序排序    std::sort(nums.begin(), nums.end(), compareDescending);    for (auto num : nums) {        std::cout << num << " "; // 输出:5 4 3 2 1    }}

自定义比较函数中的函数对象:

class DescendingComparator {public:    bool operator()(int a, int b) const {        return a > b;    }};int main() {    std::vector nums = {1, 3, 5, 2, 4};    // 使用函数对象对向量进行降序排序    std::sort(nums.begin(), nums.end(), DescendingComparator());    for (auto num : nums) {        std::cout << num << " "; // 输出:5 4 3 2 1    }}

以上就是C++ 函数指针和函数对象的区别与联系的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1457260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 09:33:07
下一篇 2025年12月18日 09:33:15

相关推荐

发表回复

登录后才能评论
关注微信