std::vector<std::vector<int>>
или хотя бы написать адекватный десткрутор, освобождающий памятьget*
заставить что-то действительно возвращатьЕму вообще не надо грамотной архитектуры. Ему надо, чтобы было два класса.
Поставленную таким образом задачу имеет смысл решать с минимальными интеллектуальными затратами.
грамотная архитектура и уменьшение связности в задаче такого уровня полезны примерно в той же степени
Скорее забивает голову не переваренным мусором, чем чему-то учит.
до уверенного владения языком ... любые попытки скакнуть сразу к SOLID, архитектуре, паттернам и прочим высокоуровневым вещам так же вредны, как обратное...
говнокод, имхо, ПОЛЕЗЕН.
выстраивание какой бы то ни было архитектуры без опыта говнокода в лучшем случае приведет к дерьмовой архитектуре, а в худшем (и более вероятном) напрочь собьет с толку и лишит ясных ориентиров.
вы так уверенно телепатите и за студента, и за препода...
Я же по коду с изрядной долей вероятности могу сказать, что ТС работу с классами чуть ли не в первый раз видит.
Остаюсь при мнении, что опыт украшается правильными решениями, как торт - кремом. А тесто его замешивается на ошибках.
писать нормальное ООП, когда это необходимо.
любые попытки привнести архитектурную правильность в этот код до того, как автор понимает, зачем она нужна, мне представляются оверинжинирингом.
на 3-4 лабе уже начинаешь задумываться
А вы сейчас предлагаете без всякой на то необходимости решать проблему, которая еще не встала
Переворачивая задом наперед естественный порядок обучения.
завтра он сдаст эту лабу и ему непременно пригодится все, что предусмотрено для развития этого кода на пять лет вперед. Вы серьезно?
Но на начальном этапе она так же уместна, как...
опыт разработки поддерживаемых приложений бесценен
class BaseMatrix
{
private:
int M, N;
int * matrix;
public:
BaseMatrix(int m, int n);
~BaseMatrix();
void SetItem(int m, int n, int x);
int GetItem(int m, int n);
}
class Matrix
{
private:
BaseMatrix * matrix;
public:
Matrix(int m, int n);
~Matrix();
void UserSet();
void AddRow();
void DelRow();
}
BaseMatrix
же есть публичный интерфейс) BaseMatrix
метод возвращающий размер и вызывайте его из класса Matrix
class InitMatrix{
private:
int M, N;
int** matrix;
public:
InitMatrix(int n, int m){
N = m;
M = m;
matrix = new int*[N];
for (int i = 0; i < N; i++){
matrix[i] = new int[M];
}
}
~InitMatrix();
//Get Item
void getItem() {
int i;
int j;
cout << "i = ";
cin >> i;
cout << "j = ";
cin >> j;
if (i >= N || j >= M)
cout << "ERROR INPUT" << endl;
else
cout << "matrix[" << i << "][" << j << "] = " << matrix[i][j] << endl;
}
//Change item in matrix
void setItem() {
int i;
int j;
cout << "i = ";
cin >> i;
cout << "j = ";
cin >> j;
if (i >= N || j >= M)
cout << "ERROR INPUT" << endl;
else
cout << "matrix[" << i << "][" << j << "] = ";
cin >> matrix[i][j];
}
};
class Matrix{
private:
InitMatrix * matrix;
public:
//Our method for matrix
};
class Base_Matrix
{
private:
int M, N;
int * matrix;
public:
Base_Matrix(int m, int n)
: M(m), N(n)
{
matrix = new int [M*N];
}
~ Base_Matrix()
{
delete [] matrix;
};
int get_item(int m, int n)
{
return matrix[m*N + n];
}
void set_item(int m, int n, int x)
{
matrix[m*N + n] = x;
}
void get_size(int * m, int * n)
{
*m = M;
*n = N;
}
};
class Matrix
{
private:
Base_Matrix * matrix;
public:
Matrix(int m, int n)
{
matrix = new Base_Matrix(m, n);
}
~ Matrix()
{
delete matrix;
}
// Методы в которых вы запрашиваете данные из консоли и заполняете ими матрицу.
// Для добавления или удаления придётся создавать временную матрицу большего
// размера, записывать туда текущую и нужный столбец, потом удалять текущую и
// присвоить указателю адрес созданной. С удалением столбца аналогично.
};