c ++ - 在一个对象上运行,运算符重载()与索引

lir*_*ran 3 c++ operators

我有一个类来表示二维数组,我想使用()运算符,例如,

Array arr;
arr(2,5) = 17; // I want to assign 17 as element in 2nd row and 5th column.
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:(但是没有用)

void operator(int m, int n)(int num) {
    int m, n;
    p[m][n] = num;
}
Run Code Online (Sandbox Code Playgroud)

我有一个运营商=(这个工作):

void operator=(const Array& other) const {
    for (int i = 0; i < DIM; i++) {
        for (int j = 0; j < DIM; j++) {
            p[i][j] = other.p[i][j];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Arrayclass有T**私人成员.

如何重载()operator来访问数组中的元素

谢谢!

Bat*_*eba 7

你需要建立类似的东西

int& operator()(int m, int n)

它返回对数组元素的引用,您可以通过调用站点上的引用进行修改.

不要忘记构建const过载

const int& operator()(int m, int n) const

因此,您可以在调用站点使用类似的语法来访问const对象的元素.


最后,对于你的赋值运算符,你不应该成功const(你有没有p mutable?),你应该返回一个对self的引用来帮助复合赋值:

Array& operator=(const Array& other){
    // Your existing code
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

参考:http://en.cppreference.com/w/cpp/language/copy_assignment