Страницы

Поиск по вопросам

вторник, 14 мая 2019 г.

Перегрузка двойной индексации C++

Пусть имеется класс Matrix: class matrix { public:
int row; int col; double **M;
matrix (int i, int j) { row = i; col = j; M = new double*[row];
for (int i = 0; i < row; i++) { M[i] = new double[col]; for (int j = 0; j < col; j++) { M[i][j] = 0; } } }; }; Нужно реализовать перегрузку двойной индексации на чтение и на запись элемента матрицы. Ход моих мыслей: Сделаю сначала на чтение, это легко => double* operator [] (int i, int j){ return M[i][j]; } Угу... много параметров... => friend double* operator [] (int i, int j){ return M[i][j]; } operator[] must be a member function ...хм...блин... Вопрос: В чем проблема? Как исправить? =)


Ответ

Так не получится. Индексация в С++ всегда одинарная. Запись M[x][y] означает (M[x])[y] Просто M[x] должен возвращать строку, а далее к строке применяется её индексация. double* operator [] (int i){return M[i];}

Комментариев нет:

Отправить комментарий