Repository navigation
Expand file tree
/
Copy path2_1.cpp
More file actions
126 lines (120 loc) · 4.6 KB
/
Copy path2_1.cpp
File metadata and controls
126 lines (120 loc) · 4.6 KB
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
/*
ДЗ-2. Срок сдачи — до 11.03.23
1. АТД. Очередь для хранения данных.
На основе класса Списокэлементовпроизвольного_типа ( использовать класс из ДЗ-1) определить класс Очередь, который должен быть производным от Списка.
Элемент данных, помещаемых в очередь - тот же класс, что использовали в списке.
Максимальный допустимый размер очереди определен по умолчанию, а также может явно указываться при создании объекта-Очереди.
Определить необходимые конструкторы.
Обеспечить корректное уничтожение объектов.
В классе должны быть функции:
добавления элемента в конец очереди (back),+
чтение первого элемента из очереди без его удаления (front) ,+
удаление первого элемента очереди (pop),+
проверка очереди на пустоту (empty),+
текущее число элементов (size),+
проверка, что очередь целиком заполнена (full).+
вывод информации об элементах очереди без ее изменения (print).+
Функции класса Список должны остаться прежними, а не переделываться под потребности очереди.
Через объект Очередь должны быть доступны только функции, указанные в задании. При этом базовый класс остается полноценным списком, т.е. в программе могут использоваться и объекты базового класса Список.
Глобальных переменных быть НЕ должно.
Использование STL и типа string запрещено.
Функция main должна демонстрировать работу с объектами написанных классов.
Пример работы: Date d1(…); Queue q1(5), q2; List l1; q1.back(d1); l1.push_back(d1); l1.print(); cout<<q2.size(); и т.д.
*/
#include <iostream>
#include <cstring>
#include "1_1_1.h"
using namespace std;
template <class Type>
class my_queue : info_list<Type>
{
unsigned int max_size;
public:
//--------------------------------------------------------------------------------
// конструкторы, деструкторы
my_queue(unsigned int i = 10)
{
max_size = i;
};
//--------------------------------------------------------------------------------
void back(Type b)
{
if (info_list<Type>::size() < max_size )
{
info_list<Type>::push_back(b);
}
else
{
cout << "my_queue is full" << endl;
}
};
void print()
{
info_list<Type>::print();
};
void front()
{
info_list<Type>::front();
};
void pop()
{
info_list<Type>::pop_front();
};
void empty()
{
info_list<Type>::empty();
};
unsigned int size()
{
return info_list<Type>::size();
}
void full()
{
if (max_size == info_list<Type>::size())
{
cout << "my_queue is full" << endl;
}
else
{
cout << "my_queue is not full, current number of elements: " << info_list<Type>::size() << endl;
}
}
};
int main()
{
const char *tmp_str1 = "hallo1\0";
const char *tmp_str2 = "hallo2\0";
const char *tmp_str3 = "hallo3\0";
const char *tmp_str4 = "hallo4\0";
bank_account acc1(tmp_str1, 10000, 12345346);
bank_account acc2(tmp_str2, 20000, -1234);
bank_account acc3(tmp_str3, 234567, 1234432);
bank_account acc4(tmp_str4, 265432, -34);
my_queue<bank_account> a1;
a1.empty();
a1.back(acc1);
a1.back(acc2);
a1.back(acc3);
a1.back(acc4);
a1.back(acc4);
a1.back(acc4);
a1.back(acc4);
a1.back(acc4);
a1.back(acc4);
a1.back(acc4);
a1.back(acc4);
a1.full();
a1.print();
a1.pop();
a1.full();
a1.print();
a1.pop();
cout << a1.size() << endl;
a1.empty();
a1.front();
info_list<bank_account> a2;
a2.push_front(acc2);
a2.front();
a2.print();
return 0;
}