//Конструктор
IMatrix(unsigned m_def, unsigned n_def, const char *NewName, int def_init_val)
{
//Name = NewName;
strcpy(Name, NewName);
m = m_def;
n = n_def;
Matrix = new int*[n];
for (unsigned i=0; i<n; i++) Matrix=new int[m]; // объявление масива
for(unsigned i=0; i<m; i++) for(unsigned j=0; j<n; j++) Matrix[j] = def_init_val; //инициализация элементов
///ReInit(m,n,def_init_val);
}
[C++] Класс матрица. Помогите найти ошибку.
Я делаю лабу по информатике, задание такое - сделать класс на С++, описывающий матрицу и действия над ними - детерминант, обратная, сложение и т. д.
В процессе тестирования я заметил "слона" - когда я обыявляю любые, даже 2 одинаковые матрицы, например А и Б, и пытаюсь приравнять их(А=Б), то матрица А приравнивается к Б, а матрица Б после этого запорывается. Симптом - как будто основному двумерному массиву, в к-м хранится сама матрица, ручками передвинули адрес. Но вроде ничего такого не измняется.
То же произойдет и с матрицей С, если сделатьА=Б+С. Причем, когда я начинал писАть класс, то таких косяков вроде не наблюдалось
Помогите пожалуйста, у меня вся лаба готова, но я не могу сдать её из-за этого косяка, на который я убил вот уже 3 недели!
З.Ы. Перегруженые операторы находятся в конце описания класса
А вот и файлик:
Код:
Код:
IMatrix & operator = (IMatrix &mtr)
{
IMatrix rc(mtr.m, mtr.n, Name, 0);
for(int i=0; i<mtr.m; i++)
for(int j=0; j<mtr.n; j++)
rc.Matrix[j] = mtr.Matrix[j];
//rc.m=mtr.m; rc.n=mtr.n;
//memcpy(Matrix, mtr.Matrix, sizeof(int)*m*n );
return rc;
}
{
IMatrix rc(mtr.m, mtr.n, Name, 0);
for(int i=0; i<mtr.m; i++)
for(int j=0; j<mtr.n; j++)
rc.Matrix[j] = mtr.Matrix[j];
//rc.m=mtr.m; rc.n=mtr.n;
//memcpy(Matrix, mtr.Matrix, sizeof(int)*m*n );
return rc;
}
это на первый взгляд только, может еще портаков много...
Но ведь в Си "&" означает "взять адрес" ? Это получается, что оператор "равно" берет в качестве параметра указатель на переменную, а не саму переменную? И возвращает указатель?
Это C++, а не C. В данном случае это ссылка, а не операция вычисления адреса. Учи матчасть, студент =)
Цитата: flat
Учи матчасть, студент =)
Тогда уж прогчасть..
Всё, спасибо. Работает.