Пусть имеется класс 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];}
Комментариев нет:
Отправить комментарий