MST

星途 面试题库

面试题:C++函数对象的基础应用

请简述C++函数对象是什么,并编写一个简单的C++函数对象示例,用于对两个整数进行加法运算,同时说明函数对象相较于普通函数在STL算法中的优势。
20.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

1. C++函数对象定义

C++函数对象(Function Object),也叫仿函数(Functor),是一个重载了()运算符的类或结构体对象。它使得对象的行为类似于函数调用,可像普通函数一样被调用。

2. 示例代码

#include <iostream>

// 定义函数对象类
class Add {
public:
    int operator()(int a, int b) const {
        return a + b;
    }
};

int main() {
    Add addObj;
    int result = addObj(3, 5);
    std::cout << "The result of addition is: " << result << std::endl;
    return 0;
}

3. 在STL算法中的优势

  • 状态存储:函数对象可以在类中定义成员变量,用于存储状态信息。而普通函数无法直接存储状态。例如,在使用std::for_each对容器元素进行处理时,函数对象可以记录处理的次数等状态,普通函数难以做到。
  • 类型可定制:函数对象是一个类型,可以作为模板参数。例如在std::sort中,可使用自定义的函数对象类型来定义比较规则,这样比传递普通函数指针在类型推导和灵活性上更有优势。
  • 代码可读性与封装性:函数对象将操作和相关数据封装在一起,增强了代码的可读性和维护性。而普通函数可能需要通过全局变量或参数传递来管理相关数据,相对来说更易出错且逻辑不清晰。