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

Ошибка при переопределении операторов - C++

Восстановить пароль Регистрация
 
xajker
0 / 0 / 0
Регистрация: 05.11.2012
Сообщений: 12
26.11.2013, 22:26     Ошибка при переопределении операторов #1
Есть класс квадратной матрицы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Matrix
{
private:
    int n;
    int **elements;
public:
    Matrix(int _n);
    ~Matrix();
    void fill();
    void print();
    Matrix operator+ (Matrix matr);
    Matrix operator- (Matrix matr);
};
Реализация:
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
50
51
52
53
54
55
56
57
58
59
60
Matrix::Matrix(int _n):n(_n)
{
    elements = new int*[n];
    for(int i=0; i <= n; i++) 
        elements[i] = new int[n];
}
 
void Matrix::fill()
{
    int tmp;
    for(int i=0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout<<"Enter ["<<i<<"]["<<j<<"] element of matrix"<<endl;
            cin>>tmp;
            elements[i][j] = tmp;
        }
    }
}
 
Matrix::~Matrix()
{
    for(int i = 0; i < n; i++)
        delete [] elements[i];
 
 delete [] elements;
 
}
 
 
void Matrix::print()
{
    for(int i = 0; i < n; i++)
    {
        cout<<" "<<endl;
        for (int j = 0; j < n; j++)
            cout<<" "<<elements[i][j];
    }
}
 
Matrix Matrix::operator+(Matrix matr)
{
            Matrix result(n);
            for (int i = 0; i < n; i++)
                for (int j = 0; j < n; j++)
                    res.elements[i][j] = elements[i][j] + matr.elements[i][j]; 
            
            return result;
}
 
Matrix Matrix::operator-(Matrix matr)
{
    Matrix result(n);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            result.elements[i][j] = elements[i][j] - matr.elements[i][j];
 
    return result;
}
Использование:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main()
{
    Matrix matr(2);
    matr.fill();
    matr.print();
 
    Matrix matr1(2);
    matr1.fill();
    matr1.print();
 
    matr = matr + matr1; //при операторе "-" та же ошибка
    matr.print();
 
    delete &matr, &matr1;
}
Выдает ошибку, не понимаю в чем дело.
Методы заполнения и печати работают корректно. На стадии операции сложения(вычитания) выдает ошибку.
Миниатюры
Ошибка при переопределении операторов  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 22:26     Ошибка при переопределении операторов
Посмотрите здесь:

первая ошибка с перегрузкой операторов C++
Ошибка при перегрузке операторов. C++
Перегрузка банарных операторов (ошибка) C++
C++ Странное поведение при переопределении operator++
Ошибка при перегрузке операторов в классе C++
Перегрузка операторов. Учусь. Ошибка C++
Почему при переопределении виртуального метода в производном классе выводится метод базового? C++
C++ Ошибка в перегрузке операторов?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
27.11.2013, 01:03     Ошибка при переопределении операторов #2
Не хватает перегрузки оператора присваивания и конструктора копии.

Добавлено через 27 секунд
Цитата Сообщение от xajker Посмотреть сообщение
delete &matr, &matr1;
ну и это лишнее


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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <iostream>
using namespace std;
class Matrix
{
private:
    int n;
    int **elements;
    void allocation();
    void clear();
public:
    /*Matrix();*/
    Matrix(int _n);
    Matrix(const Matrix& m);
    ~Matrix();
    
    void fill();
    void print();
    Matrix & operator= (const Matrix &matr);
    Matrix& operator+=(const Matrix& matr);
    Matrix operator+ (const Matrix &matr);
    Matrix & operator -=(const Matrix& matr);
    Matrix operator- (const Matrix & matr);
};
 
void Matrix::allocation()
{
     elements = new int*[n];
    for(int i=0; i <n; i++) 
        elements[i] = new int[n];
     for (int i=0; i<n; ++i) 
     for (int j=0; j<n; ++j) 
       elements[i][j] = 0;
}
 
void Matrix::clear()
{
     for(int i = 0; i < n; i++)
        delete [] elements[i];
 
 delete [] elements;
}
 
 
 
Matrix::Matrix(const Matrix& m) :n(m.n)
 {
   allocation();
     for (int i=0; i<n; ++i) 
     for (int j=0; j<n; ++j) 
       elements[i][j] = m.elements[i][j];
}
 
Matrix::Matrix(int _n = 1):n(_n)
{
   allocation();  
}
 
void Matrix::fill()
{
    int tmp;
    for(int i=0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout<<"Enter ["<<i<<"]["<<j<<"] element of matrix"<<endl;
            cin>>tmp;
            elements[i][j] = tmp;
        }
    }
}
 
Matrix::~Matrix()
{
   clear();
}
 
 
void Matrix::print()
{
    for(int i = 0; i < n; i++)
    {
        cout<<" "<<endl;
        for (int j = 0; j < n; j++)
            cout<<" "<<elements[i][j];
    }
    std::cout << std::endl;
}
 
Matrix & Matrix::operator =(const Matrix & matr)
{
    if( this != &matr )
    {
        if( matr.n != this->n )
        {
           this->clear();
           this->n = matr.n; 
           allocation();
        }
 
      for (int i=0; i<n; ++i) 
      for (int j=0; j<n; ++j) 
       elements[i][j] = matr.elements[i][j];
    }
            
            return *this;
}
 
Matrix & Matrix::operator+=(const Matrix& matr)
{
    if( matr.n != this->n )
        {
           this->clear();
           this->n = matr.n; 
           allocation();
        }
 for (int i = 0; i < n; i++)
     for (int j = 0; j < n; j++)
         elements[i][j] += matr.elements[i][j]; 
        return *this;
}
 
Matrix Matrix::operator+(const Matrix & matr)
{
            Matrix tmpmatr(*this);                        
         return (tmpmatr += matr);
}
 
Matrix & Matrix::operator -=(const Matrix& matr)
{
    if( matr.n != this->n )
        {
           this->clear();
           this->n = matr.n; 
           allocation();
        }
 for (int i = 0; i < n; i++)
     for (int j = 0; j < n; j++)
         elements[i][j] -= matr.elements[i][j]; 
        return *this;
}
 
Matrix Matrix::operator-(const Matrix&  matr)
{
     Matrix tmpmatr(*this);                        
         return (tmpmatr -= matr);
}
int main()
{
Matrix matr(2);
    matr.fill();
    matr.print();
 
    Matrix matr1(2);
    matr1.fill();
    matr1.print();
  
    matr +=  matr1; 
    matr.print();
    Matrix matr3;
    matr3 -= matr1;
    matr3.print();
 
    std::cin.get();
    std::cin.get();
}
xajker
0 / 0 / 0
Регистрация: 05.11.2012
Сообщений: 12
29.11.2013, 20:49  [ТС]     Ошибка при переопределении операторов #3
спасибо. помогло
Yandex
Объявления
29.11.2013, 20:49     Ошибка при переопределении операторов
Ответ Создать тему
Опции темы

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