如果一个类重载了调用运算符(),则我们能像使用函数一样使用这个类的对象。我们将类的对象称为函数对象。因为可以调用该对象,该类对象的行为“如同函数一样”。
b站黑马C++视频教学将该知识放在了容器部分,实际上调用运算符的重载应该在运算符重载部分讲解,是属于面向对象编程的内容。
代码示例(来源于《C++ Primer》)
下面的代码定义了absInt类的结构体,含有一个调用运算符,该调用运算符负责返回其参数val的绝对值。
struct absInt{
int operator()(int val) const{
return val < 0 ? -val: val;
}
}
该类只定义了一种操作,即函数调用运算符,它接受一个int类的实参,返回该实参绝对值(返回值也是int类型)。接下来我们调用absInt作用一个实参列表。
//五四青年节快乐
int i = 19190504;
absInt absObj;
//乍一看是不是很像函数的调用?实际上absObj是类型absInt的一个对象
int ui = absObj(i);
函数对象的应用(待续)
lambda是函数对象
使用标准库定义的函数对象
在算法中使用标准库定义的函数对象