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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
stepanovep
0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 3
#1

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

28.09.2013, 21:19. Просмотров 441. Ответов 6
Метки нет (Все метки)

Всем привет! Пишу класс 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2013, 21:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс matrix. Не получается перегрузить оператор = (C++):

Перегрузить оператор () для пользовательского класса Matrix - C++
Суть, есть класс matrix , есть int **p(матрица) и int row, col; , нужно перегрузить оператор () для вывода элемента массива, в задание...

Не получается перегрузить оператор сравнения - C++
class vremya { private: int h,m,s; public: void operator ++(int) { s++; if (s==60) ...

Не получается перегрузить оператор ++ при работе с массивами - C++
Текст: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

Не получается перегрузить оператор вывода для дружественной функции - C++
Не могу понять почему пытаясь перегрузить оператор вывода использую дружественную функцию, я не могу передать объект по значению, это...

Перегрузить оператор вывода, чтобы заданный пользовательский класс выводился в файл произвольным образом - C++
Добрый вечер. Помогите, пожалуйста. Есть класс class chelovek { private: string name; string pol; string vozrast; string...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

6
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 21:22 #2
Цитата Сообщение от stepanovep Посмотреть сообщение
matrix c = a; // не работает!!
здесь вызывается конструктор копирования. посмотреть бы на него
0
stepanovep
0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 3
29.09.2013, 22:00  [ТС] #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];
}
0
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
29.09.2013, 22:04 #4

Не по теме:

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



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

Не по теме:

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

0
mishelle92
62 / 61 / 20
Регистрация: 09.10.2012
Сообщений: 201
Завершенные тесты: 1
29.09.2013, 22:11 #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];
}
0
stepanovep
0 / 0 / 0
Регистрация: 28.09.2013
Сообщений: 3
01.10.2013, 22:20  [ТС] #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())
0
mishelle92
62 / 61 / 20
Регистрация: 09.10.2012
Сообщений: 201
Завершенные тесты: 1
01.10.2013, 22:37 #7
stepanovep, Это глупость моя. Поздно писал, не проверяя. Эта запись к наследованию относится, которое тут ни при чем
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2013, 22:37
Привет! Вот еще темы с ответами:

Перегрузить operator*() для перемножения матриц (объекты пользовательского типа Matrix) - C++
Помогите доделать программу. Там нужно всего пару ошибок исправить... У меня уже мозг взрывается((( Перегрузить операцию &quot;*&quot; для...

Как перегрузить оператор<< и оператор>> ? - C++
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу которвя мне помогла бы их решить. вопрос первый. В общем...

Класс Matrix: реализовать шаблонный класс для двумерных массивов - C++
Доброго времени суток. У меня вопрос: я создал класс Array со внутренним динамическим массивом и объекты этого типа смог создать и я ими...

Перегрузить оператор - C++
Привет всем! Помогите решить задачку. Перегрузить оператор для объекта содержащего два закрытых элемента так, чтоб элемент одного...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
01.10.2013, 22:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru