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

Перегрузка операторов при работе с матрицей

18.06.2014, 09:37. Показов 2142. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, помогите пожалуйста исправить ошибку. У меня в программе вроде не работает два оператор-функции.
С ними работаю первый раз. За грубейшие ошибки извиняюсь.
Вот моя программа:
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Matrix
{
    int long** mas;
    int size_x;
    int size_y;
 
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
    void Proizvedenie(Matrix, Matrix);
    void Multiply_num(int);
 
    void init()
    {
        mas = new int long*[size_y];
        for (int i = 0; i < size_y; i++)
        {
            mas[i] = new int long[size_x];
        }
    }
 
    void fill()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rand() % 10;
            }
        }
    }
 
public:
 
    Matrix()
    {
        size_x = 0;
        size_y = 0;
    }
 
    Matrix(int x, int y)
    {
        size_x = x;
        size_y = y;
        init();
        fill();
    };
 
    ~Matrix()
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
 
    }
 
    void print()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++) {
                cout << mas[i][j] << ' ';
            }
            cout << endl;
        }
    }
};
 
Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(*this);
 
    for (size_t i = 0; i < 3; ++i)
    for (size_t j = 0; j < 3; ++j)
        result.mas[i][j] += rhs.mas[i][j];
 
    return result;
}
 
Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(*this);
 
    for (size_t i = 0; i < 3; ++i)
    for (size_t j = 0; j < 3; ++j)
        result.mas[i][j] -= rhs.mas[i][j];
 
    return result;
}
 
/*coord coord::operator + (coord ob2)
{
    coord temp;
    temp.x = x + ob2.x;
    temp.у = у + оb2.у;
    return temp;
}
*/
 
 
int main(){
 
    setlocale(LC_ALL, "Russian");
    int x, y;
    cout << "Введите количество строк: ";
    cin >> y;
    cout << "Введите количество столбцов: ";
    cin >> x;
 
    Matrix ob3;
    Matrix ob1(x, y);
    Matrix ob2(x, y);
 
    ob1.print();
    cout << endl;
    ob2.print();
 
    ob3 = ob1 + ob2;
    ob3.print();
 
    ob3 = ob1 - ob2;
    ob3.print();
 
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.06.2014, 09:37
Ответы с готовыми решениями:

Ошибка при работе с матрицей
Всем доброго времени суток, делаю контрольную в Маткаде и нужно вычислить сумму всех элементов матрицы. Причем матрица задана с помощью...

Перегрузка операторов при наследовании
Есть базовый(StringType) и производный(tcomplex) классы. Соотвественно это строка и комплексное число. По заданию необходимо было создать...

утечка памяти при работе с матрицей
нужно сформировать массив, в который записываем 0, если все элементы столбца матрицы равны нулю, в противном случае пишем 1 Происходит...

34
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 09:46
Matrix result(*this); вызов конструктора копирования, у Вас он не определен, компилятор его сам смастерит, но к сожалению, если в качестве членов есть указатели, копирующий конструктор работает не правильно

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
const Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(size_x,size_y);
 
 
    for (size_t i = 0; i < size_y; ++i)
    for (size_t j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] + masrhs.mas[i][j];
 
    return result;
}
Добавлено через 2 минуты
и этот оператор работает только в случае совпадения размерностей матрицей аргументов(А+В)
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 09:48  [ТС]
Спасибо, но у меня все еще не хочет работать
Пишет : "невозможно обратиться к private член, объявленному в классе "Matrix""
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 09:54
так же добавьте вот такой конструктор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Matrix(const Matrix& rhs)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
        for(size_t i = 0; i < size_y; i++)
        {
              for(size_t j = 0; j < size_x; j++)
              {
                   mas[i][j] = rhs.mas[i][j];
              }
        }
    };
Добавлено через 1 минуту
Цитата Сообщение от rura Посмотреть сообщение
к private член, объявленному в классе "Matrix""
Ваш код в студию повторно

Добавлено через 2 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
result.mas[i][j] = mas[i][j] + masrhs.mas[i][j];
надеюсь Вы тут увидели опечатку)
C++
1
result.mas[i][j] = mas[i][j] + rhs.mas[i][j];
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 09:54  [ТС]
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Matrix
{
    int long** mas;
    int size_x;
    int size_y;
 
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
    void Proizvedenie(Matrix, Matrix);
    void Multiply_num(int);
 
    void init()
    {
        mas = new int long*[size_y];
        for (int i = 0; i < size_y; i++)
        {
            mas[i] = new int long[size_x];
        }
    }
 
    void fill()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rand() % 10;
            }
        }
    }
 
public:
 
    Matrix()
    {
        size_x = 0;
        size_y = 0;
    }
 
    Matrix(int x, int y)
    {
        size_x = x;
        size_y = y;
        init();
        fill();
    };
 
    Matrix(const Matrix& rhs)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
        for (size_t i = 0; i < size_y; i++)
        {
            for (size_t j = 0; j < size_x; j++)
            {
                mas[i][j] = rhs.mas[i][j];
            }
        }
    };
 
    ~Matrix()
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
 
    }
 
    void print()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++) {
                cout << mas[i][j] << ' ';
            }
            cout << endl;
        }
    }
};
 
Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(rhs.size_x, rhs.size_y);
 
    for (size_t i = 0; i < 3; ++i)
    for (size_t j = 0; j < 3; ++j)
        result.mas[i][j] += rhs.mas[i][j];
 
    return result;
}
 
Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(rhs.size_x, rhs.size_y);
 
    for (size_t i = 0; i < 3; ++i)
    for (size_t j = 0; j < 3; ++j)
        result.mas[i][j] -= rhs.mas[i][j];
 
    return result;
}
 
/*coord coord::operator + (coord ob2)
{
    coord temp;
    temp.x = x + ob2.x;
    temp.у = у + оb2.у;
    return temp;
}
*/
 
 
int main(){
 
    setlocale(LC_ALL, "Russian");
    int x, y;
    cout << "Введите количество строк: ";
    cin >> y;
    cout << "Введите количество столбцов: ";
    cin >> x;
 
    Matrix ob3;
    Matrix ob1(x, y);
    Matrix ob2(x, y);
 
    ob1.print();
    cout << endl;
    ob2.print();
 
    ob3 = ob1 + ob2;
    ob3.print();
 
    ob3 = ob1 - ob2;
    ob3.print();
 
 
    system("pause");
    return 0;
}
Вот что получилось.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 09:57
эм...я Вам другую реализацию сложения предлагал

Добавлено через 2 минуты
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
class Matrix
{
    int long** mas;
    int size_x;
    int size_y;
 
    const Matrix operator+ (const Matrix&);
 
    void init()
    {
        mas = new int long*[size_y];
        for (int i = 0; i < size_y; i++)
        {
            mas[i] = new int long[size_x];
        }
    }
 
    void fill()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rand() % 10;
            }
        }
    }
 
public:
 
    Matrix()
    {
        size_x = 0;
        size_y = 0;
    }
 
    Matrix(int x, int y)
    {
        size_x = x;
        size_y = y;
        init();
        fill();
    };
 
    Matrix(const Matrix& rhs)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
        for (size_t i = 0; i < size_y; i++)
        {
            for (size_t j = 0; j < size_x; j++)
            {
                mas[i][j] = rhs.mas[i][j];
            }
        }
    };
 
    ~Matrix()
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
 
    }
 
    void print()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++) {
                cout << mas[i][j] << ' ';
            }
            cout << endl;
        }
    }
};
 
const Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(rhs.size_x, rhs.size_y);
 
    for (size_t i = 0; i < size_y; ++i)
    for (size_t j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] + rhs.mas[i][j];
 
    return result;
}
короч так
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 09:57  [ТС]
Ой, простите пожалуйста.. Сейчас исправлю
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 09:59
Цитата Сообщение от rura Посмотреть сообщение
C++
1
2
3
4
5
6
7
Matrix(int x, int y)
 { 
size_x = x; 
size_y = y; 
init(); 
fill(); 
};
; - убрать
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:01  [ТС]
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Matrix
{
    int long** mas;
    int size_x;
    int size_y;
 
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
    void Proizvedenie(Matrix, Matrix);
    void Multiply_num(int);
 
    void init()
    {
        mas = new int long*[size_y];
        for (int i = 0; i < size_y; i++)
        {
            mas[i] = new int long[size_x];
        }
    }
 
    void fill()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rand() % 10;
            }
        }
    }
 
public:
 
    Matrix()
    {
        size_x = 0;
        size_y = 0;
    }
 
    Matrix(int x, int y)
    {
        size_x = x;
        size_y = y;
        init();
        fill();
    }
 
    Matrix(const Matrix& rhs)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
        for (size_t i = 0; i < size_y; i++)
        {
            for (size_t j = 0; j < size_x; j++)
            {
                mas[i][j] = rhs.mas[i][j];
            }
        }
    };
 
    ~Matrix()
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
 
    }
 
    void print()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++) {
                cout << mas[i][j] << ' ';
            }
            cout << endl;
        }
    }
};
 
Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(size_x, size_y);
 
 
    for (size_t i = 0; i < size_y; ++i)
    for (size_t j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] + rhs.mas[i][j];
 
    return result;
}
 
Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(size_x, size_y);
 
 
    for (size_t i = 0; i < size_y; ++i)
    for (size_t j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] - rhs.mas[i][j];
 
    return result;
}
 
/*coord coord::operator + (coord ob2)
{
    coord temp;
    temp.x = x + ob2.x;
    temp.у = у + оb2.у;
    return temp;
}
*/
 
 
int main(){
 
    setlocale(LC_ALL, "Russian");
    int x, y;
    cout << "Введите количество строк: ";
    cin >> y;
    cout << "Введите количество столбцов: ";
    cin >> x;
 
    Matrix ob3;
    Matrix ob1(x, y);
    Matrix ob2(x, y);
 
    ob1.print();
    cout << endl;
    ob2.print();
 
    ob3 = ob1 + ob2;
    ob3.print();
 
    ob3 = ob1 - ob2;
    ob3.print();
 
 
    system("pause");
    return 0;
}
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 10:04
Цитата Сообщение от rura Посмотреть сообщение
Matrix operator+ (const Matrix&);
Matrix operator- (const Matrix&);
перенесите в секцию public
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:10  [ТС]
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Matrix
{
    int long** mas;
    int size_x;
    int size_y;
 
    void Proizvedenie(Matrix, Matrix);
    void Multiply_num(int);
 
    public:
 
    Matrix operator+ (const Matrix&);
    Matrix operator- (const Matrix&);
    
 
    void init()
    {
        mas = new int long*[size_y];
        for (int i = 0; i < size_y; i++)
        {
            mas[i] = new int long[size_x];
        }
    }
 
    void fill()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rand() % 10;
            }
        }
    }
 
public:
 
    Matrix()
    {
        size_x = 0;
        size_y = 0;
    }
 
    Matrix(int x, int y)
    {
        size_x = x;
        size_y = y;
        init();
        fill();
    }
 
    Matrix(const Matrix& rhs)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rhs.mas[i][j];
            }
        }
    };
 
    ~Matrix()
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
 
    }
 
    void print()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++) {
                cout << mas[i][j] << ' ';
            }
            cout << endl;
        }
    }
};
 
Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(size_x, size_y);
 
 
    for (int i = 0; i < size_y; ++i)
    for (int j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] + rhs.mas[i][j];
 
    return result;
}
 
Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(size_x, size_y);
 
 
    for (int i = 0; i < size_y; ++i)
    for (int j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] - rhs.mas[i][j];
 
    return result;
}
 
/*coord coord::operator + (coord ob2)
{
    coord temp;
    temp.x = x + ob2.x;
    temp.у = у + оb2.у;
    return temp;
}
*/
 
 
int main(){
 
    setlocale(LC_ALL, "Russian");
    int x, y;
    cout << "Введите количество строк: ";
    cin >> y;
    cout << "Введите количество столбцов: ";
    cin >> x;
 
    Matrix ob3;
    Matrix ob1(x, y);
    Matrix ob2(x, y);
 
    ob1.print();
    cout << endl;
    ob2.print();
 
    ob3 = ob1 + ob2;
    ob3.print();
 
    ob3 = ob1 - ob2;
    ob3.print();
 
 
    system("pause");
    return 0;
}
Вот, я перенесла, но программа сразу после включения выдает ошибку и ее работа прерывается.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 10:14
Лучший ответ Сообщение было отмечено rura как решение

Решение

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
166
167
168
169
170
171
172
class Matrix
{
    int long** mas;
    int size_x;
    int size_y;
 
    
 
    void init()
    {
        mas = new int long*[size_y];
        for (int i = 0; i < size_y; i++)
        {
            mas[i] = new int long[size_x];
        }
    }
 
    void fill()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rand() % 10;
            }
        }
    }
 
public:
 
    Matrix():mas(NULL)
    {
        size_x = 0;
        size_y = 0;
    }
 
    Matrix(int x, int y)
    {
        size_x = x;
        size_y = y;
        init();
        fill();
    }
 
    Matrix(const Matrix& rhs)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
        for (size_t i = 0; i < size_y; i++)
        {
            for (size_t j = 0; j < size_x; j++)
            {
                mas[i][j] = rhs.mas[i][j];
            }
        }
    }
 
    ~Matrix()
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
 
    }
 
    void print()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++) {
                cout << mas[i][j] << ' ';
            }
            cout << endl;
        }
    }
    const Matrix operator+ (const Matrix&);
    const Matrix operator- (const Matrix&);
    const Matrix & operator=(const Matrix&);
    void Proizvedenie(Matrix, Matrix);
    void Multiply_num(int);
};
 
const Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(rhs.size_x, rhs.size_y);
 
    for (size_t i = 0; i < size_y; ++i)
    for (size_t j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] +rhs.mas[i][j];
 
    return result;
}
 
const Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(rhs.size_x, rhs.size_y);
 
    for (size_t i = 0; i < size_y; ++i)
        for (size_t j = 0; j < size_x; ++j)
            result.mas[i][j] = mas[i][j] -rhs.mas[i][j];
 
    return result;
}
const Matrix & Matrix::operator=(const Matrix &rhs)
{
    if(this == &rhs) return *this;
 
 
    if(!mas)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
    }
    else
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
    }
    for (size_t i = 0; i < size_y; ++i)
        for (size_t j = 0; j < size_x; ++j)
            mas[i][j] = rhs.mas[i][j];
 
    return *this;
}
 
/*coord coord::operator + (coord ob2)
{
    coord temp;
    temp.x = x + ob2.x;
    temp.у = у + оb2.у;
    return temp;
}
*/
 
 
int main(){
 
    setlocale(LC_ALL, "Russian");
    int x, y;
    cout << "Введите количество строк: ";
    cin >> y;
    cout << "Введите количество столбцов: ";
    cin >> x;
 
    Matrix ob3;
    Matrix ob1(x, y);
    Matrix ob2(x, y);
 
    ob1.print();
    cout << endl;
    ob2.print();
 
    ob3 = ob1 + ob2;
    ob3.print();
 
    ob3 = ob1 - ob2;
    ob3.print();
 
 
    system("pause");
    return 0;
}
Добавлено через 23 секунды
хотя бы так!

Добавлено через 3 минуты
C++
1
2
3
4
5
Matrix():mas(NULL)
    {
        size_x = 0;
        size_y = 0;
    }
на будущее, подобные конструкторы лучше не делать) не выделять память, не есть гуд в конструкторе, или это делать в методе-ф-ции, но что бы она обязательно вызывалась после вызова конструктора
1
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:17  [ТС]
Спасибо Вам большое!
А тут есть и другие функции над матрицами?
Просто работает только "-".
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 10:18
Цитата Сообщение от aLarman Посмотреть сообщение
void Proizvedenie(Matrix, Matrix);
это делается так
C++
1
const Matrix operator*(const & Matrix);
Цитата Сообщение от rura Посмотреть сообщение
void Multiply_num(int);
а это вот так
C++
1
const Matrix operator*(int);
//кажется
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:20  [ТС]
А почему не работает функция "+"?
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 10:24
работает

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
const Matrix Matrix::operator*(int f)
{
    Matrix result(size_x, size_y);
 
    for (size_t i = 0; i < size_y; ++i)
        for (size_t j = 0; j < size_x; ++j)
            result.mas[i][j] = mas[i][j]*f;
 
    return result;
}
Добавлено через 14 секунд
умножение на число
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:25  [ТС]
Вот
Миниатюры
Перегрузка операторов при работе с матрицей  
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 10:27
мейн покажите
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:30  [ТС]
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Matrix
{
    int long** mas;
    int size_x;
    int size_y;
 
 
 
    void init()
    {
        mas = new int long*[size_y];
        for (int i = 0; i < size_y; i++)
        {
            mas[i] = new int long[size_x];
        }
    }
 
    void fill()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rand() % 10;
            }
        }
    }
 
public:
 
    Matrix() :mas(NULL)
    {
        size_x = 0;
        size_y = 0;
    }
 
    Matrix(int x, int y)
    {
        size_x = x;
        size_y = y;
        init();
        fill();
    }
 
    Matrix(const Matrix& rhs)
    {
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++)
            {
                mas[i][j] = rhs.mas[i][j];
            }
        }
    }
 
    ~Matrix()
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
 
    }
 
    void print()
    {
        for (int i = 0; i < size_y; i++)
        {
            for (int j = 0; j < size_x; j++) {
                cout << mas[i][j] << ' ';
            }
            cout << endl;
        }
    }
    const Matrix operator+ (const Matrix&);
    const Matrix operator- (const Matrix&);
    const Matrix & operator=(const Matrix&);
    const Matrix operator*(int f);
    void Multiply_num(int);
};
 
const Matrix Matrix::operator+(const Matrix &rhs)
{
    Matrix result(rhs.size_x, rhs.size_y);
 
    for (int i = 0; i < size_y; ++i)
    for (int j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] + rhs.mas[i][j];
 
    return result;
}
 
const Matrix Matrix::operator-(const Matrix &rhs)
{
    Matrix result(rhs.size_x, rhs.size_y);
 
    for (int i = 0; i < size_y; ++i)
    for (int j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] - rhs.mas[i][j];
 
    return result;
}
const Matrix & Matrix::operator=(const Matrix &rhs)
{
    if (this == &rhs) return *this;
 
 
    if (!mas)
    {
 
        init();
    }
    else
    {
        for (int i = 0; i < size_y; i++)
        {
            delete[] mas[i];
        }
        delete[] mas;
        size_x = rhs.size_x;
        size_y = rhs.size_y;
        init();
    }
    for (int i = 0; i < size_y; ++i)
    for (int j = 0; j < size_x; ++j)
        mas[i][j] = rhs.mas[i][j];
 
    return *this;
}
 
const Matrix Matrix::operator*(int f)
{
    Matrix result(size_x, size_y);
 
    for (size_t i = 0; i < size_y; ++i)
    for (size_t j = 0; j < size_x; ++j)
        result.mas[i][j] = mas[i][j] * f;
 
    return result;
}
 
int main(){
 
    setlocale(LC_ALL, "Russian");
    int x, y;
    cout << "Введите количество строк: ";
    cin >> y;
    cout << "Введите количество столбцов: ";
    cin >> x;
 
    Matrix ob3;
    Matrix ob1(x, y);
    Matrix ob2(x, y);
 
    ob1.print();
    cout << endl;
    ob2.print();
    cout << endl;
 
    ob3 = ob1 + ob2;
    ob3.print();
    cout << endl;
        
    ob3 = ob1 - ob2;
    ob3.print();
    cout << endl;
 
    ob3 = ob1 * 3;
    ob3.print();
    cout << endl;
 
    system("pause");
    return 0;
}
Извините, если глупые ошибки
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
18.06.2014, 10:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const Matrix Matrix::operator*(const Matrix &rhs)
{
    Matrix result(rhs.size_x, size_y);
 
    for (size_t i = 0; i < result.size_y; ++i)
        for (size_t j = 0; j < result.size_x; ++j)
        {
            result.mas[i][j] = 0;
            for (size_t k = 0; k < size_x; ++k)
                result.mas[i][j]+= mas[i][k] *rhs.mas[k][j];
        }
 
    return result;
}
вот произведение матриц, только учтите что при перемножении ширина первой матрицы должна быть равна высоте 2ой, иначе беда

Добавлено через 15 секунд
и что до сих пор не суммирует 2 матрицы?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.06.2014, 10:32
Помогаю со студенческими работами здесь

Ошибка сегментирования при работе с матрицей
Матрица m на n Ошибка сегментирования в строке 25. Подскажите где ошибка? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Переполнение стека при работе с матрицей
Доброго времени суток. У меня такой вопрос: у меня есть матрица 1000x1000 тип float компиллятор на эту матрицу не ругается, но во время...

Использование временного промежутка при работе с матрицей
Добрый вечер: появилась такая идея, не знаю, как осуществить. Как сделать так, чтобы матрица размером 5*5 автоматически заполнялась...

Найти синтаксическую ошибку при работе с матрицей
На 21 строке выдает синтаксическую ошибку, но курсор на 1 строке, в чем ошибка??? program lab&quot;9&quot;; var matr:array of real; ...

Не работает перегрузка операторов при выводе в cout
написал свой класс ComplexNumber. перегрузил для него операторы +, -, *, /, &lt;&lt;. конструкции вида ComplexNumber a(5,10); ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru