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

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

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

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

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

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор * - C++
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Как перегрузить оператор<< и оператор>> ? - C++
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу которвя мне помогла бы их решить. вопрос первый. В общем...

Перегрузить оператор - C++
Привет всем! Помогите решить задачку. Перегрузить оператор для объекта содержащего два закрытых элемента так, чтоб элемент одного...

Перегрузить оператор - C++
Хай class Stalk { int length; public: Stalk() { //cout &lt;&lt; &quot;Constructor Stack&quot; &lt;&lt; endl; } ...

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

Ofstream перегрузить оператор << - C++
Здравствуйте, есть такая проблемка: создал клас матриц на основе двумерного вектора, помогите пожалуйста правильно перегрузить оператор...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
thick_int
Заблокирован
25.04.2012, 23:02 #16
Ошибка эта, как правило связана с тем, что где-то забыта скобка или точка с запятой.
Начинайте комментит свой код, а затем раскоменчивать.
Так и выйдете на ошибку.
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 23:06  [ТС] #17
Цитата Сообщение от thick_int Посмотреть сообщение
Ошибка эта, как правило связана с тем, что где-то забыта скобка или точка с запятой.
Начинайте комментит свой код, а затем раскоменчивать.
Так и выйдете на ошибку.
Дело в том что, код запускался потом в Windows XP, там вообще 7 ошибок нашло((
А у меня на семерке ток эта 1 единственная ошибка(
---
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
25.04.2012, 23:11 #18
Цитата Сообщение от thick_int Посмотреть сообщение
Ошибка эта, как правило связана с тем, что где-то забыта скобка или точка с запятой.
Начинайте комментит свой код, а затем раскоменчивать.
Так и выйдете на ошибку.
А можете поподробнее про этот способ рассказать? А то бывает забуду где-нибудь точку с запятой поставить, а компилятор выдаёт мне ошибку в совершенно другом файле...
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
26.04.2012, 00:36  [ТС] #19
Help Help
thick_int
Заблокирован
26.04.2012, 00:43 #20
Нет ну чем тут можно помочь. Начинайте коментировать свой код, а затем потихонечку раскоментировать.
Другого способа нет.
сержи
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
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);
    }
сержи
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");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2012, 19:00
Привет! Вот еще темы с ответами:

Как перегрузить оператор = - C++
ну там чтоб он например сложение делал или чтото другое

Как перегрузить оператор - C++
Вот написал функцию поиска студента по номеру группы. STL list void find() { setlocale( LC_ALL,&quot;Russian&quot; ); if (students.empty())...

Перегрузить оператор (true) - C++
Задание: Реализовать класс Линия, хранящую коэффициенты уравнения от двух переменных (ax + by + c = 0) Реализовать перегрузку методов ...

Как перегрузить оператор []? - C++
вообщем есть класс class Point{ private: int color_id, state; public: //constructors Point(); //destructors ...


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

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

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