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

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

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

ООП перегрузка операторов сумма элементов - C++

07.12.2013, 00:43. Просмотров 315. Ответов 6
Метки нет (Все метки)

C++ (Qt)
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
#include <iostream>
#include <windows.h>
using namespace std;
const int vector_size = 8; // размер вектора
 
class vector { // базовый класс
   private:
      int *a, *b, *c; // указатель на голову вектора
      int size; // размер вектора
   public:
      vector (void); // конструктор
      ~vector (void); // деструктор
      vector& operator ++ (int); // прототип переопределения оператора ++
      friend vector & operator -- (vector &); // прототип переопределения оператора –
      vector & operator + (vector &); // прототип переопределения оператора +
      friend bool operator > (vector const &, vector const &); // прототип переопределения >
      friend ostream & operator << (ostream &, const vector &); // прототип переопределения потока вывода
      friend istream & operator >> (istream &, const vector &); // прототип переопределения потока ввода
};
 
ostream & operator << (ostream & out, const vector & temp) { // вывода в поток
   for (int i = 0; i < temp.size; i++)
      out << temp.a[i] << ((i + 1 < temp.size ? " " : ""));
   return out;
}
 
istream & operator >> (istream & in, const vector & temp) { // вввода в поток
   for (int i = 0; i < temp.size; i++)
      in >> temp.a[i];
   return in; // возвращаем указатель на поток
}
 
vector & vector::operator ++ (int) { // переопределение оператора ++
   for (int i = 0; i < size; i++)
      a[i] *= a[i];
   return *this; // возвращаем указатель на текущий объект
}
 
vector & operator -- (vector & temp) { // переопределение оператора --
   for (int i = 0; i < temp.size-1; i++)
      temp.a[i] -= temp.a[i+1];
   return temp; // возвращаем указатель на текущий объект
}
 
/*
---------------НИЖЕ
---------------НИЖЕ
---------------НИЖЕ
------------------------   ТУТ НУЖНО ИЗМЕНИТЬ ЧТОТО В ПЕРЕОПРЕДЕЛЕНИИ---
---------------НИЖЕ
---------------НИЖЕ
*/
vector& vector::operator + (vector &a)
{ // переопределение оператора сложения +
   vector Zet;
   for (int i = 0; i <vector_size; i++)
   {
    cout<<"1= "<<a.a[i]<<"2 = "<< a.a[i];
   }
   //return ; // возвращаем указатель на первый объект
}
 
bool operator > (vector const & temp_1, vector const & temp_2) { // переопределение оператора сравнения
   int max1=temp_1.a[0];
   int max2=temp_1.a[0];
 
   for (int i = 0; i < temp_1.size; i++)
        if (max1<temp_1.a[i]) {max1=temp_1.a[i];};
 
   for (int i = 0; i < temp_1.size; i++)
        if (max2<temp_2.a[i]) {max2=temp_2.a[i];};
 
   if (max2<max1)   return true;
    else    return false;
}
 
vector::vector (void):size (vector_size) { // конструктор
   a = new int [size]; // выделение памяти для динамического массива типа int
   for (int i = 0; i < size; a[i++] = 0); // инициализация его нулями
}
 
vector::~vector (void) { // деструктор
   delete [] a;
}
 
 
int main () {
   vector A, B, C;
 
   while (true) {
      system ("cls");
      cout << "Select an action:" << endl;
      cout << " 1. >> Fill vector A." << endl;
      cout << " 2. >> Fill vector B." << endl;
      cout << " 3. << Print vector to display." << endl;
      cout << " 4. ++ Enlarge the vector A twice." << endl;
      cout << " 5. ++ Enlarge the vector B twice." << endl;
      cout << " 6. -- Reduce the vector elements A by six." << endl;
      cout << " 7. -- Reduce the vector elements B by six." << endl;
      cout << " 8. + Summa the two vectors in the vector C." << endl;
      cout << " 9. > The vector A element greater than any element of the vector B." << endl;
      cout << " 0. Exit." << endl;
      switch (cin.get ()) {
         case '1': system ("cls");
            cout << "Enter " << vector_size << " elements of vector A: " << flush;
            cin >> A;
            system ("pause");
         break;
         case '2': system ("cls");
            cout << "Enter " << vector_size << " elements of vector B: " << flush;
            cin >> B;
            system ("pause");
         break;
         case '3': system ("cls");
            cout << "Vector A: " << A << endl;
            cout << "Vector B: " << B << endl;
            system ("pause");
         break;
         case '4': system ("cls");
            cout << "Before: " << A << endl;
            A++;
            cout << "After: " << A << endl;
            system ("pause");
         break;
         case '5': system ("cls");
            cout << "Before: " << B << endl;
            B++;
            cout << "After: " << B << endl;
            system ("pause");
         break;
         case '6': system ("cls");
            cout << "Before: " << A << endl;
            --A;
            cout << "After: " << A << endl;
            system ("pause");
         break;
         case '7': system ("cls");
            cout << "Before: " << B << endl;
            --B;
            cout << "After: " << B << endl;
            system ("pause");
         break;
         case '8': system ("cls");
            cout << "Array A: " << A << endl;
            cout << "Array B: " << B << endl;
            C= A + B;
            cout << "Array C after fold: " << C << endl;
         system ("pause");
         break;
         case '9': system ("cls");
            cout << "What bolshe, A or B ?" << endl;
            cout << "Answer: ";
            if (A > B) cout<< "First"; else cout<<"Two" << endl;
            system ("pause");
         break;
         case '0': return 0;
      }
   }
}


Помогите написать переопределение "+", что бы складывал два vector, а сумму выводил в третий.!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2013, 00:43     ООП перегрузка операторов сумма элементов
Посмотрите здесь:
ООП перегрузка операторов сумма элементов C++
C++ ООП перегрузка операторов
Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока C++
C++ Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Перегрузка операторов C++
C++ Перегрузка операторов
C++ Перегрузка операторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
07.12.2013, 01:12     ООП перегрузка операторов сумма элементов #2
использование using namespace std; и самописного vector'а приведет тебя к беде...

C++
1
2
3
4
5
6
7
8
9
vector vector::operator + (vector &rhs) const
{
   vector Zet;
   for (int i = 0; i <vector_size; ++i)
   {
   Zet.a[i] = this->a[i] + rhs.a[i];
   }
   return Zet;
}
Как то так, но названия переменных у тебя, конечно... В них мог ошибиться, не вникал в суть.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 01:21     ООП перегрузка операторов сумма элементов #3
Конструктор копирования нужен и оператор присваивания.
vitaliypro
1 / 1 / 0
Регистрация: 09.09.2013
Сообщений: 125
07.12.2013, 01:26  [ТС]     ООП перегрузка операторов сумма элементов #4
C++ (Qt)
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
const int vector_size = 8; // размер вектора
 
class vector { // базовый класс
   private:
      int *a, *b, *c; // указатель на голову вектора
      int size; // размер вектора
   public:
      vector (void); // конструктор
      ~vector (void); // деструктор
      vector& operator ++ (int); // прототип переопределения оператора ++
      friend vector & operator -- (vector &); // прототип переопределения оператора –
      vector operator + (vector const &); // прототип переопределения оператора +
      friend bool operator > (vector const &, vector const &); // прототип переопределения >
      friend ostream & operator << (ostream &, const vector &); // прототип переопределения потока вывода
      friend istream & operator >> (istream &, const vector &); // прототип переопределения потока ввода
};
 
ostream & operator << (ostream & out, const vector & temp) { // вывода в поток
   for (int i = 0; i < temp.size; i++)
      out << temp.a[i] << ((i + 1 < temp.size ? " " : ""));
   return out;
}
 
istream & operator >> (istream & in, const vector & temp) { // вввода в поток
   for (int i = 0; i < temp.size; i++)
      in >> temp.a[i];
   return in; // возвращаем указатель на поток
}
 
vector & vector::operator ++ (int) { // переопределение оператора ++
   for (int i = 0; i < size; i++)
      a[i] *= a[i];
   return *this; // возвращаем указатель на текущий объект
}
 
vector & operator -- (vector & temp) { // переопределение оператора --
   for (int i = 0; i < temp.size-1; i++)
      temp.a[i] -= temp.a[i+1];
   return temp; // возвращаем указатель на текущий объект
}
 
/*
---------------НИЖЕ
---------------НИЖЕ
---------------НИЖЕ
------------------------   ТУТ НУЖНО ИЗМЕНИТЬ ЧТОТО В ПЕРЕОПРЕДЕЛЕНИИ---
---------------НИЖЕ
---------------НИЖЕ
*/
vector vector::operator + (vector  const &temp)
{
   vector Zet;
   for (int i = 0; i <temp.size; ++i)
   {
   Zet.a[i] = this->a[i] + temp.a[i];
   }
   return Zet;
}
 
 
bool operator > (vector const & temp_1, vector const & temp_2) { // переопределение оператора сравнения
   int max1=temp_1.a[0];
   int max2=temp_1.a[0];
 
   for (int i = 0; i < temp_1.size; i++)
        if (max1<temp_1.a[i]) {max1=temp_1.a[i];};
 
   for (int i = 0; i < temp_1.size; i++)
        if (max2<temp_2.a[i]) {max2=temp_2.a[i];};
 
   if (max2<max1)   return true;
    else    return false;
}
 
vector::vector (void):size (vector_size) { // конструктор
   a = new int [size]; // выделение памяти для динамического массива типа int
   for (int i = 0; i < size; a[i++] = 0); // инициализация его нулями
}
 
vector::~vector (void) { // деструктор
   delete [] a;
}
 
 
int main () {
   vector A, B, C;
 
   while (true) {
      system ("cls");
      cout << "Select an action:" << endl;
      cout << " 1. >> Fill vector A." << endl;
      cout << " 2. >> Fill vector B." << endl;
      cout << " 3. << Print vector to display." << endl;
      cout << " 4. ++ Enlarge the vector A twice." << endl;
      cout << " 5. ++ Enlarge the vector B twice." << endl;
      cout << " 6. -- Reduce the vector elements A by six." << endl;
      cout << " 7. -- Reduce the vector elements B by six." << endl;
      cout << " 8. + Summa the two vectors in the vector C." << endl;
      cout << " 9. > The vector A element greater than any element of the vector B." << endl;
      cout << " 0. Exit." << endl;
      switch (cin.get ()) {
         case '1': system ("cls");
            cout << "Enter " << vector_size << " elements of vector A: " << flush;
            cin >> A;
            system ("pause");
         break;
         case '2': system ("cls");
            cout << "Enter " << vector_size << " elements of vector B: " << flush;
            cin >> B;
            system ("pause");
         break;
         case '3': system ("cls");
            cout << "Vector A: " << A << endl;
            cout << "Vector B: " << B << endl;
            system ("pause");
         break;
         case '4': system ("cls");
            cout << "Before: " << A << endl;
            A++;
            cout << "After: " << A << endl;
            system ("pause");
         break;
         case '5': system ("cls");
            cout << "Before: " << B << endl;
            B++;
            cout << "After: " << B << endl;
            system ("pause");
         break;
         case '6': system ("cls");
            cout << "Before: " << A << endl;
            --A;
            cout << "After: " << A << endl;
            system ("pause");
         break;
         case '7': system ("cls");
            cout << "Before: " << B << endl;
            --B;
            cout << "After: " << B << endl;
            system ("pause");
         break;
         case '8': system ("cls");
            cout << "Array A: " << A << endl;
            cout << "Array B: " << B << endl;
            C=A+B;
            cout << "Array C after fold: " << C << endl;
         system ("pause");
         break;
         case '9': system ("cls");
            cout << "What bolshe, A or B ?" << endl;
            cout << "Answer: ";
            if (A > B) cout<< "First"; else cout<<"Two" << endl;
            system ("pause");
         break;
         case '0': return 0;
      }
   }
}
Работает, но выбивает в сумме первые два числа не те(((( а остальное норм)))
не могу понять что не так!
HELP PLEASE!
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 01:58     ООП перегрузка операторов сумма элементов #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
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
173
174
175
176
177
178
179
180
181
182
183
184
#include <iostream>
#include <windows.h>
 
using namespace std;
 
const int vector_size = 8; // размер вектора
 
class vector { // базовый класс
   private:
      int *a, *b, *c; // указатель на голову вектора
      int size; // размер вектора
   public:
      vector (void); // конструктор
      vector (const vector&); // конструктор копирования
      ~vector (void); // деструктор
      vector& operator=(const vector&); // прототип переопределения оператора =
      vector& operator ++ (int); // прототип переопределения оператора ++
      friend vector & operator -- (vector &); // прототип переопределения оператора –
      vector operator + (vector const &); // прототип переопределения оператора +
      friend bool operator > (vector const &, vector const &); // прототип переопределения >
      friend ostream & operator << (ostream &, const vector &); // прототип переопределения потока вывода
      friend istream & operator >> (istream &, const vector &); // прототип переопределения потока ввода
};
 
ostream & operator << (ostream & out, const vector & temp) { // вывода в поток
   for (int i = 0; i < temp.size; i++)
      out << temp.a[i] << ((i + 1 < temp.size ? " " : ""));
   return out;
}
 
istream & operator >> (istream & in, const vector & temp) { // вввода в поток
   for (int i = 0; i < temp.size; i++)
      in >> temp.a[i];
   return in; // возвращаем указатель на поток
}
 
vector & vector::operator ++ (int) { // переопределение оператора ++
   for (int i = 0; i < size; i++)
      a[i] *= a[i];
   return *this; // возвращаем указатель на текущий объект
}
 
vector & operator -- (vector & temp) { // переопределение оператора --
   for (int i = 0; i < temp.size-1; i++)
      temp.a[i] -= temp.a[i+1];
   return temp; // возвращаем указатель на текущий объект
}
 
/*
---------------НИЖЕ
---------------НИЖЕ
---------------НИЖЕ
------------------------   ТУТ НУЖНО ИЗМЕНИТЬ ЧТОТО В ПЕРЕОПРЕДЕЛЕНИИ---
---------------НИЖЕ
---------------НИЖЕ
*/
vector vector::operator + (vector  const &temp)
{
   vector Zet;
   for (int i = 0; i <temp.size; ++i)
   {
   Zet.a[i] = this->a[i] + temp.a[i];
   }
   return Zet;
}
 
 
bool operator > (vector const & temp_1, vector const & temp_2) { // переопределение оператора сравнения
   int max1=temp_1.a[0];
   int max2=temp_1.a[0];
 
   for (int i = 0; i < temp_1.size; i++)
        if (max1<temp_1.a[i]) {max1=temp_1.a[i];};
 
   for (int i = 0; i < temp_1.size; i++)
        if (max2<temp_2.a[i]) {max2=temp_2.a[i];};
 
   if (max2<max1)   return true;
    else    return false;
}
 
vector::vector (void):size (vector_size) { // конструктор
   a = new int [size]; // выделение памяти для динамического массива типа int
   for (int i = 0; i < size; a[i++] = 0); // инициализация его нулями
}
 
vector& vector::operator=(const vector& v) //переопределения оператора =
{
    if (this == &v) return *this;
    delete [] a;
    size = v.size;
    a = new int [v.size]; 
    for (int i = 0; i < v.size; ++i)
        a[i] = v.a[i];
    
    return *this;
}
 
vector::vector (const vector& v) // конструктор копирования
{
    size = v.size;
    a = new int [v.size];
    for (int i = 0; i < v.size; ++i)
        a[i] = v.a[i];
}
 
vector::~vector (void) { // деструктор
   delete [] a;
}
 
 
int main () {
   vector A, B, C;
 
   while (true) {
      system ("cls");
      cout << "Select an action:" << endl;
      cout << " 1. >> Fill vector A." << endl;
      cout << " 2. >> Fill vector B." << endl;
      cout << " 3. << Print vector to display." << endl;
      cout << " 4. ++ Enlarge the vector A twice." << endl;
      cout << " 5. ++ Enlarge the vector B twice." << endl;
      cout << " 6. -- Reduce the vector elements A by six." << endl;
      cout << " 7. -- Reduce the vector elements B by six." << endl;
      cout << " 8. + Summa the two vectors in the vector C." << endl;
      cout << " 9. > The vector A element greater than any element of the vector B." << endl;
      cout << " 0. Exit." << endl;
      switch (cin.get ()) {
         case '1': system ("cls");
            cout << "Enter " << vector_size << " elements of vector A: " << flush;
            cin >> A;
            system ("pause");
         break;
         case '2': system ("cls");
            cout << "Enter " << vector_size << " elements of vector B: " << flush;
            cin >> B;
            system ("pause");
         break;
         case '3': system ("cls");
            cout << "Vector A: " << A << endl;
            cout << "Vector B: " << B << endl;
            system ("pause");
         break;
         case '4': system ("cls");
            cout << "Before: " << A << endl;
            A++;
            cout << "After: " << A << endl;
            system ("pause");
         break;
         case '5': system ("cls");
            cout << "Before: " << B << endl;
            B++;
            cout << "After: " << B << endl;
            system ("pause");
         break;
         case '6': system ("cls");
            cout << "Before: " << A << endl;
            --A;
            cout << "After: " << A << endl;
            system ("pause");
         break;
         case '7': system ("cls");
            cout << "Before: " << B << endl;
            --B;
            cout << "After: " << B << endl;
            system ("pause");
         break;
         case '8': system ("cls");
            cout << "Array A: " << A << endl;
            cout << "Array B: " << B << endl;
            C=A+B;
            cout << "Array C after fold: " << C << endl;
         system ("pause");
         break;
         case '9': system ("cls");
            cout << "What bolshe, A or B ?" << endl;
            cout << "Answer: ";
            if (A > B) cout<< "First"; else cout<<"Two" << endl;
            system ("pause");
         break;
         case '0': return 0;
      }
   }
}
vitaliypro
1 / 1 / 0
Регистрация: 09.09.2013
Сообщений: 125
07.12.2013, 02:26  [ТС]     ООП перегрузка операторов сумма элементов #6
спасибо огромное)
а что изменилось)))???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2013, 02:39     ООП перегрузка операторов сумма элементов
Еще ссылки по теме:
C++ Перегрузка операторов
Перегрузка операторов >>, << C++
Перегрузка операторов C++
перегрузка операторов C++
Перегрузка операторов! C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 02:39     ООП перегрузка операторов сумма элементов #7
Цитата Сообщение от vitaliypro Посмотреть сообщение
а что изменилось)))???
...
Цитата Сообщение от alsav22 Посмотреть сообщение
Конструктор копирования нужен и оператор присваивания.
Yandex
Объявления
07.12.2013, 02:39     ООП перегрузка операторов сумма элементов
Ответ Создать тему
Опции темы

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