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

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

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

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

05.12.2013, 02:13. Просмотров 539. Ответов 6
Метки нет (Все метки)

есть задача, нужно изменить перегрузку операции "+". что бы возвращало значение суммы двух входящих Векторов (массивов).

HELP

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
#include <iostream>
#include <windows.h>
using namespace std;
const int vector_size = 8; // размер вектора
 
class vector { // базовый класс
   private:
      int *a, *b; // указатель на голову вектора
      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 &); // прототип переопределения потока ввода
} A, B, C;
 
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) { // переопределение оператора сложения +
   for (int i = 0; i < this -> size; i++)
    this->a[i] = temp.a[i]+temp.b[i];
   return *this; // возвращаем указатель на первый объект
}
 
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 () {
   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;
      }
   }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 02:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ООП перегрузка операторов сумма элементов (C++):

ООП перегрузка операторов сумма элементов - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; const int vector_size = 8; // размер вектора class vector { //...

ООП перегрузка операторов - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; const int vector_size = 8; // размер вектора class vector { //...

ООП в С++ (наследование, инкапсуляция, полиморфизм, перегрузка операторов): что читать? - C++
Нужно освежить, подзабылось. Были у меня институцкие методички доцента Шеховцова. Хороша вещь, но потерялись. Нужны либо набор...

Перегрузка операторов (==, <<, >>, +) для класса "Денежная сумма" - C++
Реализовать класс «Денежная сумма». Данные класса: размер суммы, код валюты, курс по отношению к доллару. Операции: сложение двух сумм,...

Перегрузка операторов << и >>, загрузка элементов в структуру из последовательного потока - C++
Добрый день. Для своего класса нужно загрузить элементы в структуру данных из последовательного потока. Написал перегрузку операторов: ...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

6
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,267
Записей в блоге: 1
05.12.2013, 03:01 #2
Сразу вопрос: почему вектор содержит два "указателя на голову"?

Я догадываюсь почему. Поэтому сразу задам вопрос: а если надо будет сложить сто векторов, сколько указателей ты добавишь в поля класса?
И тут мы приходим к тому, что ты не знаешь основ и не представляешь себе классы как пользовательские типы данных!
0
vitaliypro
1 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 125
05.12.2013, 03:07  [ТС] #3
я не могу понять перегрузку...
в одним случаях я разобрался, а в этом не могу!
Я и не отрицаю того, что я ЭТОГО НЕ ЗНАЮ! иначе я бы не спрашивал.

Можешь помочь?
0
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,267
Записей в блоге: 1
05.12.2013, 03:13 #4
vitaliypro, а почему вы не отвечаете на мой ответ?
1
vitaliypro
1 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 125
05.12.2013, 03:20  [ТС] #5
почему два?
я не знаю.


C++ (Qt)
1
2
3
4
5
int operator + (vector const & temp_1, vector const & temp_2) { // переопределение оператора сложения +
   for (int i = 0; i <vector_size; i++)
    /*temp.a[i]*/= temp_1.a[i]+temp_2.a[i];
   return /*what is return ??? */; // возвращаем указатель на первый объект
}
как то так, скорее всего, только что вместо комментов(((
0
Kuzia domovenok
1957 / 1810 / 142
Регистрация: 25.03.2012
Сообщений: 6,267
Записей в блоге: 1
05.12.2013, 03:51 #6
А вместо комментов вектор С
А в конце return C

Добавлено через 2 минуты
И не int operator, а vector operator
0
vitaliypro
1 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 125
05.12.2013, 04:14  [ТС] #7
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
#include <iostream>
#include <windows.h>
using namespace std;
const int vector_size = 8; // размер вектора
 
class vector { // базовый класс
   private:
      int *a, *b; // указатель на голову вектора
      int size; // размер вектора
   public:
      vector (void); // конструктор
      ~vector (void); // деструктор
      vector & operator ++ (int); // прототип переопределения оператора ++
      friend vector & operator -- (vector &); // прототип переопределения оператора –
      vector operator + (vector const &, vector const &); // прототип переопределения оператора +
      friend bool operator > (vector const &, vector const &); // прототип переопределения >
      friend ostream & operator << (ostream &, const vector &); // прототип переопределения потока вывода
      friend istream & operator >> (istream &, const vector &); // прототип переопределения потока ввода
} A, B, C;
 
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 operator + (vector const & temp_1, vector const & temp_2) { // переопределение оператора сложения +
   for (int i = 0; i <vector_size; i++)
    vector c= temp_1.a[i]+temp_2.a[i];
   return c; // возвращаем указатель на первый объект
}
 
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 () {
   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;
      }
   }
}
все равно ругается...((((9
0
05.12.2013, 04:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 04:14
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Добавить целое число в очередь (operator&lt;&lt;) Взять число из очереди (operator&gt;&gt;) Студия жалуется на эту часть кода a.vector1 &gt;&gt;...

перегрузка операторов С++ - C++
есть программа: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Time { private: int s, min,...

перегрузка операторов - C++
Есть перечисление и функция : enum Num { on, tw, th, fo ,fi, si ,se, ei, ni ,last }; Num wl(on); Num operator++(Num&amp;...

Перегрузка операторов - C++
Не смотря на вычитывание из книжек и форумов, что такое &quot;перегрузка операторов&quot;, так до конца и не ясно, что это... Как я понял -...


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

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

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