Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 05.11.2012
Сообщений: 12

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

26.11.2013, 22:26. Показов 940. Ответов 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;
}
Выдает ошибку, не понимаю в чем дело.
Методы заполнения и печати работают корректно. На стадии операции сложения(вычитания) выдает ошибку.
Миниатюры
Ошибка при переопределении операторов  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2013, 22:26
Ответы с готовыми решениями:

Ошибка при переопределении переменных
Этот код компилируется без проблем: int main() { target: static int x=0; goto target; } Этот код не компилируется...

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

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

2
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
27.11.2013, 01:03
Не хватает перегрузки оператора присваивания и конструктора копии.

Добавлено через 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();
}
0
0 / 0 / 1
Регистрация: 05.11.2012
Сообщений: 12
29.11.2013, 20:49  [ТС]
спасибо. помогло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2013, 20:49
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru