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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
#1

перегрузить оператор ++ - C++

25.04.2012, 18:03. Просмотров 1025. Ответов 24
Метки нет (Все метки)

Всем привет!!!Тут такое дело, когда запускаю программу она запускается, а когда дело доходит до перегрузки она выдает ошибку((: То есть закрывает ее.
--
Хотел спросить как это исправить?
Вот код программы:
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
class Size
{
    int column;
    int row;
    public:
    Size()
    {
        column = 1;
        row = 1;
    }
    Size(int i, int j)
    {
        column = i;
        row = j;
    }
    void set(int i, int j)
    {
        column = i;
        row = j;
    }
    int get_column()
    {
        return column;
    }
    int get_row()
    {
        return row;
    }
};
 
class Matrix
{
    Size sz;
    int **values;
    void init_matrix(int value = 0)
    {
        try
        {
            values = new int*[sz.get_row()];
        }
        catch(bad_alloc xa)
        {
            exit(1);
        }
        for(int i = 0; i < sz.get_row(); i++)
        {
            try
            {
                values[i] = new int[sz.get_column()];
            }
            catch(bad_alloc xa)
            {
                exit(1);
            }
        }
        for(int i = 0; i < sz.get_row(); i++)
        {
            for(int j = 0; j < sz.get_column(); j++)
            {
                values[i][j] = value;
            }
        }
    }
    public:
    Matrix()
    {
        sz = Size();
        init_matrix();
    }
    Matrix(Size s, int value)
    {
        sz = s;
        init_matrix(value);
    }
    ~Matrix()
    {
        delete [] values;
    }
    int get_rows()
    {
        return sz.get_row();
    }
    int get_columns()
    {
        return sz.get_column();
    }
    int get_value(int i, int j)
    {
        if(i < 0 || i >= sz.get_row()) return 0;
        if(j < 0 || j >= sz.get_column()) return 0;
        return values[i][j];
    }
    Matrix operator++()
    {
        for(int i = 0; i < sz.get_row(); i++)
        {
            for(int j = 0; j < sz.get_column(); j++)
            {
                values[i][j]++;
            }
        }
        return *this;
    }
};
 
int main(int argc, char *argv[])
{
    cout << "Demo\n";
    Size sz(5, 5);
    Matrix m(sz, 2);
    for(int i = 0; i < sz.get_row(); i++)
    {
        for(int j = 0; j < sz.get_column(); j++)
        {
            cout << m.get_value(i, j)
                 << "\t";
        }
        cout << endl;
    }
    ++m;
    cout << "----------------------------------------\n";
    for(int i = 0; i < sz.get_row(); i++)
    {
        for(int j = 0; j < sz.get_column(); j++)
        {
            cout << m.get_value(i, j)
                 << "\t";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}
Вот само условие:
Создать класс Matrix, содержащий следующие элементы:
- поле «размер» Size s;
- поле «данные» int Data[s.Raw,s.Column];
- метод получения кол-ва строк int GetRaw();
- метод получения кол-ва столбцов int GetColumn();
- метод получения значения ячейки int GetValue(int i, int j)
- конструктор с параметрами Matrix(Size s, int InitialValue);
Создать класс Size, содержащий элементы:
- поле «кол-во строк» int Raw;
- поле «кол-во столбцов» int Column;
- конструктор с параметрами Size(int Raw, int Column );
В классе Matrix перегрузить оператор ++ перемножение матриц.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
26.04.2012, 00:46  [ТС]     перегрузить оператор ++ #21
Цитата Сообщение от thick_int Посмотреть сообщение
Нет ну чем тут можно помочь. Начинайте коментировать свой код, а затем потихонечку раскоментировать.
Другого способа нет.
Уже сделал, ток такая же фигня(((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
thick_int
Заблокирован
26.04.2012, 01:00     перегрузить оператор ++ #22
Ничего подобного. Ошибка сразу отлавливается.
Не ленитесь и для начала закоментируйте весь код в функции main, кроме return.
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
26.04.2012, 01:12  [ТС]     перегрузить оператор ++ #23
Щас еще раз попробую!!
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
26.04.2012, 15:04     перегрузить оператор ++ #24
сержи, всё что вам нужно для минимальной реализации того, что написано в задания, это заменить строчку 99 в исходном файле на
C++
1
Matrix& operator++()
(т.е. после Matrix поставить символ амперсанд, т.к. функция должна возвращать ссылку на старый объект, а не создавать новый объект ). Так же не плохо было бы добавить конструктор копирования и переопределить оператор "="
Это по-моему вам уже неоднократно писали
И абсолютно не к чему делать вложенный try ... catch ... в цикле
достаточно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
try
        {
            values = new int*[sz.get_row()];
            for(int i = 0; i < sz.get_row(); i++)
            {
    
               values[i] = new int[ sz.get_column() ]
            }
       }
catch(bad_alloc xa)
    {
        exit(1);
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2012, 19:00     перегрузить оператор ++
Еще ссылки по теме:

C++ Перегрузить оператор -
Ofstream перегрузить оператор << C++
Перегрузить оператор C++
Перегрузить оператор доступа по индексу C++
Перегрузить оператор (true) C++

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

Или воспользуйтесь поиском по форуму:
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
26.04.2012, 19:00  [ТС]     перегрузить оператор ++ #25
Всем большое спасибо!!!!Проблема решена, программа работает!!!
Я ее записал в 2-x файлах срр.
---------------------
Size.cpp
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
class Size {
    int column;
    int row;
    
public:
    Size() {
        column = 1;
        row = 1;
    }
 
    Size(int i, int j) {
        column = i;
        row = j;
    }
 
    void set(int i, int j) {
        column = i;
        row = j;
    }
 
    int get_column() {
        return column;
    }
 
    int get_row() {
        return row;
    }
};
-----------
Matrix.cpp
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include "Size.cpp"
 
using namespace std;
 
 
class Matrix {
    Size sz;
    int **values;
 
public:
 
    Matrix(Size s, int value) {
        sz = s;
        init_matrix(value);
    }
    ~Matrix() {
        delete [] values;
    }
 
    void init_matrix(int value = 0) {
        
        try {
            values = new int*[sz.get_row()];
        } catch(bad_alloc xa) {
            exit(1);
        }
 
        for(int i = 0; i < sz.get_row(); i++) {
            try {
            values[i] = new int[sz.get_column()];
            } catch(bad_alloc xa) {
                exit(1);
            }
        }
 
        for(int i = 0; i < sz.get_row(); i++) {
            for(int j = 0; j < sz.get_column(); j++) {
                values[i][j] = value;
            }
        }
    }
 
 
    int get_rows() {
        return sz.get_row();
    }
    int get_columns() {
        return sz.get_column();
    }
    int get_value(int i, int j) {
        if(i < 0 || i >= sz.get_row()) return 0;
        if(j < 0 || j >= sz.get_column()) return 0;
        return values[i][j];
    }
    Matrix operator++() {
        for(int i = 0; i < sz.get_row(); i++) {
            for(int j = 0; j < sz.get_column(); j++) {
                values[i][j]++;
            }
        }
        return *this;
    }
 
    Matrix(const Matrix& copy) {
        sz = copy.sz;
        try {
            values = new int*[sz.get_row()];
        } catch(bad_alloc xa) {
            exit(1);
        }
 
        for(int i = 0; i < sz.get_row(); i++) {
            try {
                values[i] = new int[sz.get_column()];
            } catch(bad_alloc xa) {
                exit(1);
            }
 
            for(int j = 0; j < sz.get_column(); j++) {
                values[i][j] = copy. values[i][j] ;
            }
        }
    }
 
    Matrix& operator = (const Matrix& Copy){
        if (&Copy==this) return *this;
 
        for(int i = 0; i < sz.get_row(); i++) {
            delete[] values[i];
        }
 
        delete[] values;
        sz = Copy.sz;
            
        try {
            values = new int*[sz.get_row()];
        } catch(bad_alloc xa) {
            exit(1);
        }
 
        for(int i = 0; i < sz.get_row(); i++) {
            try {
                values[i] = new int[sz.get_column()];
            } catch(bad_alloc xa) {
                exit(1);
            }
            for(int j = 0; j < sz.get_column(); j++) {
                values[i][j] = Copy. values[i][j] ;
            }
        }
        return *this;
    }
};
 
void main(int argc, char *argv[]) {
    cout << "Demo\n";
    Size sz(5, 5);
    Matrix m(sz, 2);
 
    for(int i = 0; i < sz.get_row(); i++) {
        for(int j = 0; j < sz.get_column(); j++) {
            cout << m.get_value(i, j) << "\t";
        }
        cout << endl;
    }
 
    ++m;
 
    cout << "----------------------------------------\n";
    for(int i = 0; i < sz.get_row(); i++) {
        for(int j = 0; j < sz.get_column(); j++) {
            cout << m.get_value(i, j) << "\t";
        }
        cout << endl;
    }
 
    system("pause");
}
Yandex
Объявления
26.04.2012, 19:00     перегрузить оператор ++
Ответ Создать тему
Опции темы

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