Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C++] Класс матрица. Помогите найти ошибку.

1.9K
22 апреля 2007 года
0xf001
96 / / 24.05.2005
Помогите пожалуйста:
Я делаю лабу по информатике, задание такое - сделать класс на С++, описывающий матрицу и действия над ними - детерминант, обратная, сложение и т. д.

В процессе тестирования я заметил "слона" - когда я обыявляю любые, даже 2 одинаковые матрицы, например А и Б, и пытаюсь приравнять их(А=Б), то матрица А приравнивается к Б, а матрица Б после этого запорывается. Симптом - как будто основному двумерному массиву, в к-м хранится сама матрица, ручками передвинули адрес. Но вроде ничего такого не измняется.
То же произойдет и с матрицей С, если сделатьА=Б+С. Причем, когда я начинал писАть класс, то таких косяков вроде не наблюдалось

Помогите пожалуйста, у меня вся лаба готова, но я не могу сдать её из-за этого косяка, на который я убил вот уже 3 недели!

З.Ы. Перегруженые операторы находятся в конце описания класса
А вот и файлик:
4.3K
22 апреля 2007 года
flat
142 / / 27.12.2005
Код:
//Конструктор
  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);
  }

 
Код:
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;
}

это на первый взгляд только, может еще портаков много...
1.9K
22 апреля 2007 года
0xf001
96 / / 24.05.2005
Но ведь в Си "&" означает "взять адрес" ? Это получается, что оператор "равно" берет в качестве параметра указатель на переменную, а не саму переменную? И возвращает указатель?
4.3K
22 апреля 2007 года
flat
142 / / 27.12.2005
Это C++, а не C. В данном случае это ссылка, а не операция вычисления адреса. Учи матчасть, студент =)

Цитата: 0xf001
оператор "равно"


оператор присвоения

1.9K
23 апреля 2007 года
0xf001
96 / / 24.05.2005
Цитата: flat
Учи матчасть, студент =)


Тогда уж прогчасть..

Всё, спасибо. Работает.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог