第二节 · 换一种走路的方式 · 递增递减运算符定义

下标运算符 [] 和函数调用运算符 () 是两个特殊的运算符,它们让对象可以像数组或函数一样使用。


下标运算符 []

class Array
{
private:
    int data[100];
    
public:
    // 返回引用,允许读写
    int& operator[](int index)
    {
        return data[index];
    }
    
    // const 版本,只读
    const int& operator[](int index) const
    {
        return data[index];
    }
};

int main()
{
    Array arr;
    arr[0] = 42;           // 调用非 const 版本
    cout << arr[0] << endl;
    
    const Array& ref = arr;
    cout << ref[0] << endl;  // 调用 const 版本
    // ref[0] = 1;  // 错误:const 不能修改
    
    return 0;
}

带边界检查的下标


多维下标


函数调用运算符 ()

重载 () 的对象称为函数对象仿函数(functor)。


函数对象与 STL


带状态的函数对象


函数对象 vs lambda


标准函数对象


用 [] 实现映射查找


习题

  • 实现一个 String 类,支持 [] 访问字符。

  • 创建一个多项式类,用 () 计算给定 x 的值。

  • 比较函数对象和 lambda 的优缺点。

Last updated