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

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

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

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

25.04.2012, 18:03. Просмотров 1111. Ответов 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 перегрузить оператор ++ перемножение матриц.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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++
Здравствуйте, есть такая проблемка: создал клас матриц на основе двумерного вектора, помогите пожалуйста правильно перегрузить оператор...

24
Kuzia domovenok
1954 / 1807 / 140
Регистрация: 25.03.2012
Сообщений: 6,259
Записей в блоге: 1
25.04.2012, 18:11 #2
А оператор присвоения и конструктор копирования кот перегружать будет?
Это обязательно для всех классов, хранящих динамически выделенную память
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
25.04.2012, 18:14 #3
да, и про описание деструктора не забудьте
0
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 18:18  [ТС] #4
Ыыы!!!
Не совсем понял вас!!
0
thick_int
Заблокирован
25.04.2012, 18:33 #5
Запомните хорошенько, что перегруженный префиксный оператор инкремента (и декремента) должен возвращать ССЫЛКУ НА объект, на который он действует, поэтому после Matrix поставь амперсанд.
0
Kuzia domovenok
1954 / 1807 / 140
Регистрация: 25.03.2012
Сообщений: 6,259
Записей в блоге: 1
25.04.2012, 18:34 #6
в Matrix не хватает
C++
1
2
Matrix(Matrix&);
Matrix& operator = (Matrix&)
1
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 18:45  [ТС] #7
Это получается после 71 строчки вписать
C++
1
2
Matrix(Matrix&);
Matrix& operator = (Matrix&)
?
0
Kuzia domovenok
1954 / 1807 / 140
Регистрация: 25.03.2012
Сообщений: 6,259
Записей в блоге: 1
25.04.2012, 18:50 #8
не только вписать, но и реализовать копирование для каждого случая.
Понимаешь, конструктор копирования по умолчанию копирует непосредственно поля класса
то есть при копировании у двух классов указатели values будут указывать на одно и то же место.
Хуже того, для того временного объекта, из которого ты скопировал данные может быть вызван деструктор(например после выхода из функции), который очистит вашу общую память и будет очень плохо это
0
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 18:54  [ТС] #9
мх!!
А не могли бы вы помочь в этом((..
0
Kuzia domovenok
1954 / 1807 / 140
Регистрация: 25.03.2012
Сообщений: 6,259
Записей в блоге: 1
25.04.2012, 19:04 #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
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;
}
готово
0
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 22:12  [ТС] #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
154
155
156
#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(i = 0; i < sz.get_row(); i++)
        {
            for(int j = 0; j < sz.get_column(); j++)
            {
                values[i][j] = value;
            }
        }
    }
    public:
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;
}
 
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(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;
}
Вроде все правильно вставил, но выдает следующий error:
c:\program files (x86)\microsoft visual studio\myprojects\sqw\sqe.cpp(157) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

Подскажите в чем ошибка?
Просто раньше когда была такая ошибка, помогало создание нового проекта, а щас даже это не помогает((
0
thick_int
Заблокирован
25.04.2012, 22:20 #12
В 127 строке точка с запятой пропущена.
0
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 22:25  [ТС] #13
Ставлю ;
в 127 строке:

Цитата Сообщение от сержи Посмотреть сообщение
return *this;
};
Все равно error((
Может сам С++ глючит?
0
thick_int
Заблокирован
25.04.2012, 22:31 #14
А какой теперь Error?
0
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 22:50  [ТС] #15
Цитата Сообщение от thick_int Посмотреть сообщение
А какой теперь Error?
Такой же error((
Щас попробую на нетбуке запустить ее!!!

Добавлено через 14 минут
Help Help
0
25.04.2012, 22:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2012, 22:50
Привет! Вот еще темы с ответами:

Как перегрузить оператор = - 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 ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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