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

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

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

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

26.11.2013, 22:26. Просмотров 234. Ответов 2
Метки нет (Все метки)

Есть класс квадратной матрицы:
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++):

Странное поведение при переопределении operator++ - C++
Всем привет! Изучая переопределения в С++ наткнулся на следующую непонятку: #include &lt;iostream&gt; using namespace std; class...

Ошибка при перегрузке операторов. - C++
Здравствуйте! Возникла необходимость создать свой класс-обертку для работы с большими числами. Бибилиотека mpir=порт GMP. Пример рабочий:...

Ошибка при перегрузке операторов - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; class fraction { public: int numerator; int denominator; fraction(); ...

Почему при переопределении виртуального метода в производном классе выводится метод базового? - C++
Всем добра! Помогите разобраться почему при переопределении виртуального метода в производном классе выводится метод базового ? По идеи...

Ошибка при перегрузке операторов в классе - C++
Я создал класс myNVector для работы с векторами произвольного размера: в заголовочном файле: class myNVector { public: ...

Ошибка с перегрузкой операторов - C++
копилятор видимо тупит или я туплю или автор книги class countt{ public: int getvar()const{return itsvar;} void setvar(int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MrCold
854 / 752 / 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
спасибо. помогло
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 20:49
Привет! Вот еще темы с ответами:

Ошибка в перегрузке операторов? - C++
не могу понять в чем ошибка class cMatrix { private: int rows; int columns; public:

Перегрузки операторов. В чем ошибка? - C++
Доброго времени суток) В ВУЗе задали задание: написать класс Многочлен, и описать в нем методы сложения, вычитания, произведения...

Перегрузка операторов. Учусь. Ошибка - C++
перегрузка операторов.. ЗАДАНИЕ: М2=М1-V – из М1 удалить строки, сумма элементов которых больше суммы элементов V. где V- массив,...

Перегрузка банарных операторов (ошибка) - C++
Есть класс матрица в ней нужно реализовать перегрузку оператора +. Вот код класса. Компилятор выдаёт ошибку class Matrix { ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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