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

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

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

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

25.04.2012, 18:03. Просмотров 1070. Ответов 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++
Привет всем! Помогите решить задачку. Перегрузить оператор для объекта содержащего два закрытых элемента так, чтоб элемент одного...

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
25.04.2012, 18:11     перегрузить оператор ++ #2
А оператор присвоения и конструктор копирования кот перегружать будет?
Это обязательно для всех классов, хранящих динамически выделенную память
MrGluck
Модератор
Эксперт CЭксперт С++
7167 / 4333 / 633
Регистрация: 29.11.2010
Сообщений: 11,777
25.04.2012, 18:14     перегрузить оператор ++ #3
да, и про описание деструктора не забудьте
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 18:18  [ТС]     перегрузить оператор ++ #4
Ыыы!!!
Не совсем понял вас!!
thick_int
Заблокирован
25.04.2012, 18:33     перегрузить оператор ++ #5
Запомните хорошенько, что перегруженный префиксный оператор инкремента (и декремента) должен возвращать ССЫЛКУ НА объект, на который он действует, поэтому после Matrix поставь амперсанд.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
25.04.2012, 18:34     перегрузить оператор ++ #6
в Matrix не хватает
C++
1
2
Matrix(Matrix&);
Matrix& operator = (Matrix&)
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 18:45  [ТС]     перегрузить оператор ++ #7
Это получается после 71 строчки вписать
C++
1
2
Matrix(Matrix&);
Matrix& operator = (Matrix&)
?
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
25.04.2012, 18:50     перегрузить оператор ++ #8
не только вписать, но и реализовать копирование для каждого случая.
Понимаешь, конструктор копирования по умолчанию копирует непосредственно поля класса
то есть при копировании у двух классов указатели values будут указывать на одно и то же место.
Хуже того, для того временного объекта, из которого ты скопировал данные может быть вызван деструктор(например после выхода из функции), который очистит вашу общую память и будет очень плохо это
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
25.04.2012, 18:54  [ТС]     перегрузить оператор ++ #9
мх!!
А не могли бы вы помочь в этом((..
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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;
}
готово
сержи
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.

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

Цитата Сообщение от сержи Посмотреть сообщение
return *this;
};
Все равно error((
Может сам С++ глючит?
thick_int
Заблокирован
25.04.2012, 22:31     перегрузить оператор ++ #14
А какой теперь Error?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2012, 22:50     перегрузить оператор ++
Еще ссылки по теме:

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

Не получается перегрузить оператор сравнения - C++
class vremya { private: int h,m,s; public: void operator ++(int) { s++; if (s==60) ...

Как перегрузить оператор разыменования * - C++
Как перегрузить оператор разыменования?

Как перегрузить оператор ввода? - C++
Как перегрузить оператор ввода? rational.h #define _Rational_h_ #include &lt;iostream&gt; using namespace std; int nod(int p,...

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


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

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

Добавлено через 14 минут
Help Help
Yandex
Объявления
25.04.2012, 22:50     перегрузить оператор ++
Ответ Создать тему
Опции темы

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