Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lol96
0 / 0 / 0
Регистрация: 05.10.2014
Сообщений: 22
1

Класс содержащий vector

03.05.2015, 13:20. Просмотров 404. Ответов 2
Метки нет (Все метки)

Вот я написал класс с использованием vector
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
#include <vector>
#include <iostream>
 
using namespace std;
 
class Vector
{
friend ostream &operator<<(ostream &, const Vector &);
friend istream &operator>>(istream &s, Vector &a);
friend Vector operator+ (const Vector &c, const Vector &d);
friend Vector operator- (const Vector &e, const Vector &f);
friend Vector operator* (const Vector &g, const Vector &h);
public:
  Vector();            
  Vector(int );
  ~Vector();
  
private:
  vector<int> vector;
};
 
Vector::Vector()
{
 vector.resize(5);
 for (int i=0; i<vector.size(); i++)
 vector[i]=0;
}
 
Vector::Vector(int pVector)
{
 vector.resize(pVector>0 ? pVector : 6);
 for(int i=0; i<vector.size(); i++)
 vector[i]=0;
}
 
Vector::~Vector()
{
 vector.clear();
}
 
istream &operator>>(istream &s, Vector &a)
{
 a.vector.clear();
 cout<<endl<<"Введите размер вектора: ";
 int n;
 cin>>n;
 a.vector.resize(n);
 for(int i=0; i<a.vector.size(); i++)
 s>>a.vector[i];
 return s;
}
 
ostream &operator<<(ostream &s, const Vector &a)
{
for(int i=0; i<a.vector.size(); i++)
s<<a.vector[i]<<' ';
s<<std::endl;
return s;
}
 
int main()
{
 setlocale(LC_ALL, "Russian");
 Vector vector1;
 Vector vector2(7);
 
 cout<<"Элементы первого вектора(по-умолчанию): "<<vector1<<endl;
 cout<<"Элементы второго вектора(с параметром 7): "<<vector2<<endl;
 
 cout<<"Заполните первый вектор:"<<endl;
 cin>>vector1;
 cout<<"Элементы первого вектора: "<<vector1<<endl;
 cout<<"Заполните второй вектор:"<<endl;
 cin>>vector2;
 cout<<"Элементы второго вектора: "<<vector2<<endl;
 
 Vector vector3(vector1);
 cout<<"Элементы 3 вектора: "<<vector3<<endl;
 
 cout<<"Заполните 3 вектор:"<<endl;
 cin>>vector3;
 cout<<"Элементы 3 вектора: "<<vector3<<endl;
 cout<<"Элементы первого вектора: "<<vector1<<endl;
 
 vector3=vector1;
 cout<<"Присваиваем вектору 3 вектор 1: "<<vector3<<endl;
 
 
 cin.get();
 cin.get();
}
Кто может навести пример перегрузки оператора +
у меня не получается выделить под него память.
P.s Ну и если не сложно проверить правильно ли реалеован деструктор и конструктор
Должно быть как этот мой код но через векторы.
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
#include <iostream>
 
using namespace std;
class Mas
{
 friend istream &operator>> (istream &, Mas &); // перегруженный оператор ввода
 friend ostream &operator<< (ostream &, const Mas &); // перегруженный оператор вывода
 friend Mas operator+ (const Mas &a,const Mas &b);
public:
  Mas();               // конструктор по-умолчанию
  Mas(const Mas& );// конструктор копирования
  Mas(int );//конструктор с параметром
  virtual ~Mas();//деструктор
  void setMas(); //заполнения массива
  virtual void getMas(); //вывод массива
  int getSize() const; //количество элементов массива
  const Mas &operator= (const Mas &);//оператор присваивания
  //Mas operator+ (const Mas &);//поэлементное сложение
  Mas operator- (const Mas &);//поэлементное вычитание
  Mas operator* (const Mas &);//умножения элементов
  int &operator[] (int );//взятие индекса
  bool operator== (const Mas &) const;
protected:
  int* mas;
  int size; //размер массива
};
//-------------------------------------------------------------------------------------------------------------------------------------
class Arr : public Mas
{
 friend istream &operator>> (istream &, Arr &); // перегруженный оператор ввода
 friend ostream &operator<< (ostream &, const Arr &); // перегруженный оператор вывода
 friend Arr operator+ (const Arr &c,const Arr &d);
public:
 Arr(){};
 Arr(int pMas) : Mas(pMas){};
 Arr(const Arr& cMas) : Mas(cMas){};
 ~Arr(){};
 void getMas(); 
 const Arr &operator= (const Arr &);//оператор присваивания
 Arr operator- (const Arr &);//поэлементное вычитание
 Arr operator* (const Arr &);//умножения элементов
 int &operator[] (int );//взятие индекса
};
//-------------------------------------------------------------------------------------------------------------------------------------
Mas::Mas()//конструктор по-умолчанию
{
 size=5;
 mas=new int[size];
 for(int i=0; i<size; i++)//обнуления массива
 mas[i]=0;
}
Mas::Mas(const Mas& cMas):size(cMas.size) //конструктор копии
{
 mas= new int[size];
 
 for(int i=0; i<size; i++)
 mas[i] = cMas.mas[i];
}
Mas::Mas(int pMas)//конструктор с параметром
{
 size = (pMas>0 ? pMas : 5);
 mas= new int[size];
 
 for(int i=0; i<size; i++)//обнуления массива
 mas[i]=0;
}
 
Mas::~Mas()
{
 delete[] mas;
}
 
int Mas::getSize() const
{
 return size;   
}
 
/*void Mas::setMas()
{
 for(int i=0; i<size; i++)
 cin>>mas[i];
}
 
void Mas::getMas()
{
 for(int i=0; i<size; i++)
 cout<<"|"<<mas[i]<<"|";
}
//----------------------------------------------------------------------------------------------------------
void Arr::getMas()
{
 cout<<endl<<"Введите границы массива: ";
 int limit;
 cin>>limit;
 for(int i=0; i<size; i++)
 {
  cout<<"|array["<<i+limit<<"] = "<<mas[i];       
 }
}*/
//----------------------------------------------------------------------------------------------------------
bool Mas::operator== (const Mas &ravno) const
{
 if(size!=ravno.size)
 return false;
 for(int i=0; i<size; i++)
 if(mas[i]!=ravno.mas[i])
 {
  return false;
 }
 else
 {
  return true;
 }
}
const Mas& Mas::operator= (const Mas &op)
{
 if(&op!=this)
 {
  if(size!=op.size)
  {
   delete[] mas;
   size=op.size;
   mas=new int[size];
  }
  for(int i=0; i<size; i++)
  mas[i]=op.mas[i];
 }
 return *this;
}
//----------------------------------------------------------------------------------------------------------
/*Mas Mas::operator+ (const Mas &op)
{
 if(size!=op.size)
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 Mas sum(size);
 for(int i=0; i<size; i++)
 sum.mas[i]=mas[i]+op.mas[i];
 return sum;
}*/
Mas operator+ (const Mas &a, const Mas &b)
{
 if(a.size!=b.size || b.size!=a.size)
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 Mas sum(a.size);
 for(int i=0; i<sum.size; i++)
 {
 sum.mas[i]=a.mas[i]+b.mas[i];
 }
 return sum;
}
Arr operator+ (const Arr &c, const Arr &d)
{
 if(c.size!=d.size || d.size!=c.size)
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 Arr suma(c.size);
 for(int i=0; i<suma.size; i++)
 {
 suma.mas[i]=c.mas[i]+d.mas[i];
 }
 return suma;
}
//----------------------------------------------------------------------------------------------------------
Mas Mas::operator- (const Mas &op)
{
 if(size!=op.size)
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 Mas sub(size);
 for(int i=0; i<size; i++)
 sub.mas[i]=mas[i]-op.mas[i];
 return sub;
}
//----------------------------------------------------------------------------------------------------------
Mas Mas::operator* (const Mas &op)
{
 if(size!=op.size)
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 Mas mul(size);
 for(int i=0; i<size; i++)
 mul.mas[i]=mas[i]*op.mas[i];
 return mul;
}
//----------------------------------------------------------------------------------------------------------
int &Mas::operator[] (int index)
{
 if(index<0 || index>=size)
 {
  cerr<<endl<<"Ошибка индекса: "<<index<<endl;
  exit(1);
 }
 return mas[index];
}
//----------------------------------------------------------------------------------------------------------
const Arr& Arr::operator= (const Arr &op)
{
 if(&op!=this)
 {
  if(size!=op.size)
  {
   delete[] mas;
   size=op.size;
   mas=new int[size];
  }
  for(int i=0; i<size; i++)
  mas[i]=op.mas[i];
 }
 return *this;
}
//----------------------------------------------------------------------------------------------------------
Arr Arr::operator- (const Arr &op)
{
 if(size!=op.size)
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 Arr sub(size);
 for(int i=0; i<size; i++)
 sub.mas[i]=mas[i]-op.mas[i];
 return sub;
}
//----------------------------------------------------------------------------------------------------------
Arr Arr::operator* (const Arr &op)
{
 if(size!=op.size)
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 Arr mul(size);
 for(int i=0; i<size; i++)
 mul.mas[i]=mas[i]*op.mas[i];
 return mul;
}
//----------------------------------------------------------------------------------------------------------
int &Arr::operator[] (int index)
{
 if(index<0 || index>=size)
 {
  cerr<<endl<<"Ошибка индекса: "<<index<<endl;
  exit(1);
 }
 return mas[index];
}
//----------------------------------------------------------------------------------------------------------
istream &operator>> (istream &s, Mas &ob)
{
 delete[] ob.mas;
 cout<<"Введите размер массива"<<endl;
 s>>ob.size;
 ob.mas=new int[ob.size];
 
 for(int i=0; i<ob.size; i++)
 s>>ob.mas[i];
 return s;
}
ostream &operator<< (ostream &s, const Mas &ob)
{
 for(int i=0; i<ob.size; i++)
 s<<"|"<<ob.mas[i]<<"|";
 s<<std::endl;
 return s;
}
//----------------------------------------------------------------------------------------------------------
istream &operator>> (istream &in, Arr &el)
{
 delete[] el.mas;
 el.mas=new int[el.size];
 
 for(int i=0; i<el.size; i++)
 in>>el.mas[i];
 return in;
}
ostream &operator<< (ostream &out, const Arr &el)
{
 cout<<endl<<"Введите границы массива: ";
 int limit;
 cin>>limit;
 for(int i=0; i<el.size; i++)
 {
  out<<"|array["<<i+limit<<"] = "<<el.mas[i];       
 }
 out<<std::endl;
 return out;
}
//----------------------------------------------------------------------------------------------------------
int main()
{
 setlocale(LC_ALL, "Russian");
 Mas mas1; //массив по-умолчанию
 Mas mas2(7); //массив с параметром 12
 
 //----------------------------------------------------------------------------------------------------------
 cout<<"Размер первого массива(массива по-умолчанию): "<<mas1.getSize()<<endl;
 cout<<endl<<"Элементы первого массива (массива по-умолчанию):\n"<<mas1<<endl;
 
 
 cout<<endl<<"Размер второго массива(с параметром 7): "<<mas2.getSize()<<endl;
 cout<<endl<<"Элементы второго массива(с параметром 7):\n"<<mas2<<endl;
 //------------------------------------------------------------------------------------------------------------
 cout<<endl<<"Заполните первый массив:"<<endl;
 cin>>mas1;
 cout<<endl<<"Элементы первого массива: "<<mas1<<endl;
 
 cout<<endl<<"Заполните второй массив:"<<endl;
 cin>>mas2;
 cout<<endl<<"Элементы второго массива: "<<mas2<<endl;
 
 //--------------------------------------------------------------------------------------------------------------
 Mas mas3(mas1);//создаём массив с помошью конструктора копирования
 cout<<endl<<"Работает конструктор копирования..."<<endl;
 cout<<endl<<"Размер 3 массива: "<<mas3.getSize()<<endl;
 cout<<endl<<"Элементы 3 массива: "<<mas3<<endl;
 //---------------------------------------------------------------------------------------------------------------
 cout<<endl<<"Заменим элементы массива 3: "<<endl;;//проверка конструктора копирования
 cin>>mas3;
 cout<<endl<<"Элементы массива 3: "<<mas3<<endl;
 cout<<endl<<"Элементы массива 1: "<<mas1<<endl;
 //----------------------------------------------------------------------------------------------------------------
 Mas mas4=mas1+mas3;
 cout<<endl<<"Сложения массивов 1 и 3:"<<mas4<<endl;
 Mas mas5=mas1-mas3;
 cout<<endl<<"Вычитание массивов 1 и 3:"<<mas5<<endl;
 Mas mas6=mas1*mas3;
 cout<<endl<<"Умножения массивов 1 и 3:"<<mas6<<endl;
 int index;
 cout<<endl<<"Введите номер элемента с массива 1:"<<endl;
 cin>>index;
 cout<<endl<<"Элемент массива 1 по даному номеру:"<<"|"<<mas1[index-1]<<"|"<<endl;//взятие индекса
 mas3=mas1;
 cout<<endl<<"Присваиваем массиву 3 массив 1:"<<mas3<<endl;
 //----------------------------------------------------------------------------------------------------------------
 cout<<endl<<"Производный класс."<<endl;
 Arr arr1;
 Arr arr2(7);
 //--------------------------------------------------------------------------------------------------------------
 cout<<endl<<"Элементы первого массива(массива по-умолчанию): "<<arr1<<endl;
 cout<<endl<<"Размер первого массива: "<<arr1.getSize()<<endl;
 
 cout<<endl<<"Элементы второго массива(с параметром 7): "<<arr2;
 cout<<endl<<"Размер второго массива(с параметром 7): "<<arr2.getSize()<<endl;
 //--------------------------------------------------------------------------------------------------------------
 cout<<endl<<"Заполните первый массив:"<<endl;
 cin>>arr1;
 cout<<endl<<"Элементы первого массива: "<<arr1<<endl;
 cout<<endl<<"Заполните второй массив:"<<endl;
 cin>>arr2;
 cout<<endl<<"Элементы второго массива: "<<arr2<<endl;
 //--------------------------------------------------------------------------------------------------------------
 Arr arr3(arr1);//создаём массив с помошью конструктора копирования
 cout<<endl<<"Работает конструктор копирования..."<<endl;
 cout<<endl<<"Элементы 3 массива: "<<arr3;
 cout<<endl<<"Размер 3 массива: "<<arr3.getSize()<<endl;
 //---------------------------------------------------------------------------------------------------------------
 cout<<endl<<"Заполните 3 массив:"<<endl;
 cin>>arr3;
 cout<<endl<<"Элементы массива 3: "<<arr3<<endl;
 cout<<endl<<"Проверка конструктора копирования: "<<endl;;//проверка конструктора копирования
 cout<<endl<<"Элементы массива 1: "<<arr1<<endl;
 //--------------------------------------------------------------------------------------------------------------
 Arr arr4=arr3+arr1;
 cout<<"Сложения массивов 1 и 3: "<<arr4<<endl;
 Arr arr5=arr1-arr3;
 cout<<endl<<"Вычитание массивов 1 и 3:"<<arr5<<endl;
 Arr arr6=arr1*arr3;
 cout<<endl<<"Умножения массивов 1 и 3:"<<arr6<<endl;
 cout<<endl<<"Введите номер элемента с массива 1:"<<endl;
 cin>>index;
 cout<<endl<<"Элемент массива 1 по даному номеру:"<<"|"<<arr1[index-1]<<"|"<<endl;//взятие индекса
 arr3=arr1;
 cout<<endl<<"Присваиваем массиву 3 массив 1:"<<arr3<<endl;
 //--------------------------------------------------------------------------------------------------------------
 cout<<"Нажмите Enter для выхода...";
 
 cin.get();
 cin.get();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2015, 13:20
Ответы с готовыми решениями:

Определить класс химический элемент, содержащий информацию о названии элемента его химических свойствах. Определить класс медикаменты, содержащий разн
Определить класс химический элемент, содержащий информацию о названии элемента его химических...

Базовый класс Complex и производный класс Vector
Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в...

Класс и vector
всем доброго времени суток,задача состоит в том что бы данные классов хранились в векторе,что я и...

Класс Vector
Помогите молю. Нужно реализовать класс вектор как класс шаблон. Перегрузить операторы ввода-...

Задания на класс vector
Помогите, пожалуйста, с задачей. Нужно добавить в вектор нечетные целые числа от -3 до 3. Удалить...

2
nmcf
6531 / 5755 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
03.05.2015, 13:50 2
Имя vector замени на v или ещё на какое-то, чтобы не совпадало с контейнером vector.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Vector::Vector(): v(5, 0) { }
 
Vector::Vector(int pVector)
{
 v.resize(pVector>0 ? pVector : 6, 0);
}
 
Vector operator + (const Vector &e, const Vector &f)
{
 if(e.size() != f.size())
 {
  cout<<"Массивы разного размера!"<<endl;
  exit(1);
 }
 
 Vector r(e.size());
 for(int i=0; i < r.size(); i++) r.v[i] = e.v[i] + f.v[i];
 
 return r;
}
1
Lol96
0 / 0 / 0
Регистрация: 05.10.2014
Сообщений: 22
03.05.2015, 15:37  [ТС] 3
спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2015, 15:37

vector (шаблонный класс)
Нужно создать простенький шаблонный класс вектор Подскажите пожалуйста , как написать запись...

Создать класс Vector 2D
Создать класс Vector для работы с векторами на плоскости, содержащий следующие члены класса: 1. ...

Шаблонный класс vector
Всем привет. Помогите создать шаблонный класс vector и массив который хранит значения...


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

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

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