Форум программистов, компьютерный форум CyberForum.ru

Класс matrix. Не получается перегрузить оператор = - C++

Восстановить пароль Регистрация
 
stepanovep
0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 3
28.09.2013, 21:19     Класс matrix. Не получается перегрузить оператор = #1
Всем привет! Пишу класс matrix.
Не получается перегрузить оператор =
Конструктор копирования тоже не получается. Оба выводят одну и ту же ошибку -
Необработанное исключение в "0x00c71f4a" в "matrix.exe": 0xC0000005:
Нарушение прав доступа при чтении "0xcccccccc".

Ошибка в 30-ой строке, где происходит присваивание mtr[i][j] = a.mtrp[i][j].
Помогите пожалуйста разобраться в чем-тут дело, вроде все легально)

Вот класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <fstream>
#include "matrix.h"
using namespace std;
 
ofstream cout ("output.txt");
 
#define FOR(i,n)    for(int i=0; i<n; ++i)
 
class matrix {
    int size;
    double **mtr;
public:
    //конструкторы
    matrix (const int n = 3);
    matrix (const matrix&);
    double* &operator [] (int i) {return mtr[i];}
    int get_size () {return size;}
    
 
 
    //арифметические операции
    matrix& operator = (const matrix& a){
        if (this == &a)
            return (*this);
 
        size = a.size;
        FOR (i,size)
            FOR(j,size)
            mtr[i][j] = a.mtr[i][j];
 
    }
    friend const matrix operator + (matrix&, matrix&);
    friend const matrix operator - (matrix&, matrix&);
    friend const matrix operator * (matrix&, matrix&);
    friend const matrix operator - (matrix&);  // унарный минус
    friend matrix& operator += (matrix&, matrix&);
    friend matrix& operator -= (matrix&, matrix&);
    friend matrix& operator *= (matrix&, matrix&);
    friend bool operator == (matrix&, matrix&);
 
    friend ostream& operator << (ostream&, matrix&);
};
int main(){
    matrix a(3), b(3);
    a[0][0] = b[1][2] = 2;
    cout << a << endl << b;
    matrix c = a;  // не работает!!
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2013, 21:19     Класс matrix. Не получается перегрузить оператор =
Посмотрите здесь:

как перегрузить оператор []? C++
C++ Не получается перегрузить оператор сравнения
C++ Не получается перегрузить оператор ++ при работе с массивами
перегрузить оператор ++ C++
C++ Перегрузить оператор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 21:22     Класс matrix. Не получается перегрузить оператор = #2
Цитата Сообщение от stepanovep Посмотреть сообщение
matrix c = a; // не работает!!
здесь вызывается конструктор копирования. посмотреть бы на него
stepanovep
0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 3
29.09.2013, 22:00  [ТС]     Класс matrix. Не получается перегрузить оператор = #3
Цитата Сообщение от _ Посмотреть сообщение
здесь вызывается конструктор копирования. посмотреть бы на него
вот он, конструктор копирования
C++
1
2
3
4
5
6
matrix :: matrix (matrix& a){
    size = a.get_size();
    FOR (i,size)
        FOR (j,size)
            mtr[i][j] = a.mtr[i][j];
}
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
29.09.2013, 22:04     Класс matrix. Не получается перегрузить оператор = #4

Не по теме:

Цитата Сообщение от stepanovep Посмотреть сообщение
FOR (i,size)
а что за странная конструкция?



Добавлено через 1 минуту

Не по теме:

все, не досмотрел макрос

mishelle92
57 / 56 / 19
Регистрация: 09.10.2012
Сообщений: 179
Завершенные тесты: 1
29.09.2013, 22:11     Класс matrix. Не получается перегрузить оператор = #5
В конструкторе копирования память под mtr не выделяется же.
Попробуй что-то типа:
C++
1
2
3
4
5
6
7
8
matrix :: matrix (matrix& a)
    :matrix(a.getsize())
{
    size = a.get_size();
    FOR (i,size)
        FOR (j,size)
            mtr[i][j] = a.mtr[i][j];
}
stepanovep
0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 3
01.10.2013, 22:20  [ТС]     Класс matrix. Не получается перегрузить оператор = #6
Спасибо большое)
хоть компилятор твой код не принял, но я понял смысл, дело было в памяти.
теперь уже работает, еще раз спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
matrix :: matrix (matrix& a){
    size = a.get_size();
    try{
        mtr = new double*[size];
        FOR(i,size)
            mtr [i] = new double[size];
    }catch (bad_alloc)  {return;}
    FOR (i,size)
        FOR (j,size)
            mtr[i][j] = a.mtr[i][j];
}
Добавлено через 2 минуты
скажите пожалуйста, а что это за запись:
C++
1
matrix :: matrix (matrix& a) : matrix(a.get_size())
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2013, 22:37     Класс matrix. Не получается перегрузить оператор =
Еще ссылки по теме:

C++ Перегрузить оператор -
Ofstream перегрузить оператор << C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mishelle92
57 / 56 / 19
Регистрация: 09.10.2012
Сообщений: 179
Завершенные тесты: 1
01.10.2013, 22:37     Класс matrix. Не получается перегрузить оператор = #7
stepanovep, Это глупость моя. Поздно писал, не проверяя. Эта запись к наследованию относится, которое тут ни при чем
Yandex
Объявления
01.10.2013, 22:37     Класс matrix. Не получается перегрузить оператор =
Ответ Создать тему
Опции темы

Текущее время: 12:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru