无法弄清楚为什么未调用重载的operator []

时间:2020-05-22 15:45:16

标签: c++ pointers operator-overloading

我有班Matrix和班RowMatrix具有一个指向成员类Row的对象的指针作为成员变量。我为MatrixRow重载了运算符[]。但是以某种方式,Row中的重载运算符永远不会被调用,我不知道为什么不这样做。

示例代码: 矩阵

class Row
{
    int* value;
    int size;

public:
    int& operator[](int i)
    {
        assert(i >= 0 && i < size);
        return value[i];
    }
};
class Matrix
{
private:
    Row **mat;        // Pointer to "Row"-Vector
    int nrows, ncols;   // Row- and Columnnumber

public:
    Row& Matrix::operator[](int i){
        assert(i >= 0 && i < nrows);
        return *mat[i];
    }
    Row** getMat() {
        return mat;
    }
    // Constructor
    Matrix(int rows, int cols, int value);

};

matrix.cpp

#include "matrix.h"

Matrix::Matrix(int rows, int cols, int value) : nrows(rows), ncols(cols){
    mat = new Row*[rows];

    for(int i = 0; i < rows; i++) {
        mat[i] = new Row(ncols);
        for(int j = 0; j < ncols; j++){
            // the operator-overload of Row[] isn't getting called and I don't get why not
            mat[i][j] = value;
        }
    }
}


int main(){

Matrix m = new Matrix(2, 2, 4);

return 0;

2 个答案:

答案 0 :(得分:1)

mat[i]给您Row*,您想调用Row::operator[],但是指向Row的指针不会自动取消引用。因此,您必须手动取消引用它:(*mat[i])[j]

答案 1 :(得分:1)

所以我自己弄清楚了。 我试图从Matrixmat[][]调用[]运算符,但是由于matRow** Row& Matrix::operator[](int i)从未被调用。