Метод, который вы используете для создания матрицы, не имеет никакого отношения к классу, как утверждают ваши требования. Вы создаете простой T**
, не имеет значения, что вы делаете это в методе класса.
Создание матрицы T
, которую можно использовать как в matrix[i][j]
, означает, что выражение matrix[i]
должно возвращать тип, для которого также определен оператор []
для возврата T
. Поэтому обычный способ сделать это - разбить его на шаги:
Matrix<T> operator[] (int)
возвращает MatrixRow<T>&
MatrixRow<T>& operator[] (int)
возвращает T&
Будут также const
версии этих операторов, которые будут использоваться при чтении значений из матрицы (неконстантные версии будут использоваться при записи в матрицу).
Итак, как минимум, вы должны создать класс с этим интерфейсом:
template <typename T>
class Matrix {
public:
Matrix(int rows, int cols);
const MatrixRow<T>& operator[] (int row) const;
MatrixRow<T>& operator[] (int row);
}
PS: Это читается как домашнее задание, не так ли?