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

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

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

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

18.06.2014, 09:37. Просмотров 676. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 09:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов при работе с матрицей (C++):

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

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

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

Перегрузка операторов при динамическом экземпляре класса - C++
Добрый день. Имею: class Single { int a; int b; ~Single(){}; public: .... static void destroyedObj(Single* d) //...

При раздельной компиляции не работает перегрузка операторов ввода-вывода - C++
разделил программу и при компиляции компилятор ругается на объявление перегрузки операторов ввода вывода(на скриншотах видно что он...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.06.2014, 09:46 #2
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
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 09:48  [ТС] #3
Спасибо, но у меня все еще не хочет работать
Пишет : "невозможно обратиться к private член, объявленному в классе "Matrix""
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.06.2014, 09:54 #4
так же добавьте вот такой конструктор
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
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 09:54  [ТС] #5
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
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.06.2014, 09:57 #6
эм...я Вам другую реализацию сложения предлагал

Добавлено через 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
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 09:57  [ТС] #7
Ой, простите пожалуйста.. Сейчас исправлю
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.06.2014, 09:59 #8
Цитата Сообщение от rura Посмотреть сообщение
C++
1
2
3
4
5
6
7
Matrix(int x, int y)
 { 
size_x = x; 
size_y = y; 
init(); 
fill(); 
};
; - убрать
0
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:01  [ТС] #9
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
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.06.2014, 10:04 #10
Цитата Сообщение от rura Посмотреть сообщение
Matrix operator+ (const Matrix&);
Matrix operator- (const Matrix&);
перенесите в секцию public
0
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:10  [ТС] #11
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
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.06.2014, 10:14 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:17  [ТС] #13
Спасибо Вам большое!
А тут есть и другие функции над матрицами?
Просто работает только "-".
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
18.06.2014, 10:18 #14
Цитата Сообщение от aLarman Посмотреть сообщение
void Proizvedenie(Matrix, Matrix);
это делается так
C++
1
const Matrix operator*(const & Matrix);
Цитата Сообщение от rura Посмотреть сообщение
void Multiply_num(int);
а это вот так
C++
1
const Matrix operator*(int);
//кажется
0
rura
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 153
18.06.2014, 10:20  [ТС] #15
А почему не работает функция "+"?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 10:20
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Необходимо перегрузить следующие операторы: • Присвоение; • Сложение (+; в случае символьных полей сложения понимается как...

Перегрузка операторов - C++
вот есть такое задание Для заданного по варианту класса выполнить следующие действия: 1) описать все типы конструкторов и деструктор...

Перегрузка операторов +=, -=, *= и /= - C++
Есть перегруженные функции + - * / На MSDN есть такая фраза: &quot;Оператор += нельзя перегрузить непосредственно, однако пользовательские...

Перегрузка операторов - C++
Исправьте ошибку, неуказанный тип возвращаемого значения, какая я то глупая ошибка, но я не могу понять На этой строке point1=point2+5;...


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

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

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