#pragma once template class Array2DT { public: Array2DT (size_t r, size_t c): rows{r}, cols{c} { data = new T[rows * cols]; } ~Array2DT(){ delete[] data; } Array2DT(const Array2DT & other) = delete; Array2DT & operator = (const Array2DT & other) = delete; T & operator [](size_t r, size_t c) { size_t pos = r * cols + c; return data[pos]; } const T & operator[] (size_t r, size_t c) const { size_t pos = r * cols + c; return data[pos]; } size_t Rows() const { return rows; } size_t Cols() const { return cols; } private: T * data{nullptr}; size_t rows, cols; };