8. 函数调用运算重载

函数对象

函数对象是指重载了 () 运算符的对象,此类对象能像函数一样调用,因此叫函数对象。

如:

MyClass a;
a(666); // a 必须重载 () 运算符

示例

创建一个类 Translater,此类的对象会保存一个中间词。然后调用此对象并给出两个参数。结果打印 第一个参数 中间此 第二个参数 这样的内容。

// filename: op_call.cpp
#include <iostream>

using namespace std;

// 翻译类
class Translater {
    public:
        Translater(const char * s) : middle(s){}
        void operator()(const char *who,const char *what) {
            cout << who << " " << middle << " " << what << endl;
        }
    private:
        string middle;
};

int main(int argc, char * argv[]) {
    Translater chinese("说");
    Translater english("said");
    chinese("张三", "你好");  // 需要重载 () 运算符
    english("lisa", "bye");
    return 0;
}

编译和运行结果如下

weimz@mzstudio:~$ g++ -o op_call op_call.cpp
weimz@mzstudio:~$ ./op_call 
张三  你好
lisa said bye