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

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

Войти
Регистрация
Восстановить пароль
 
13Inferno13
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 25
#1

Модификация разработанного класса - C++

18.01.2013, 00:34. Просмотров 310. Ответов 2
Метки нет (Все метки)

Создал класс видеомагнитофон, требуется доработать его вот по этому заданию:
Рассмотреть модификацию видеомагнитофона,который запоминает(регистрирует) у себя в памяти все выполненные пользователем действия. При этом считая что видеокассета обладает уникальным числовым идентификатором. В качестве тестовой программы рассмотреть задачу выполнения просмотра на видеомагнитофоне, точный вид которой не определен. Просмотр состоит в последовательном выполнении следующих операций: вставить кассету перемотать кассету в начало, включить воспроизведение, выполнить останов, извлечь кассету.
Подскажите как это реализовать все.

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
Main.cpp
#include <iostream>
#include "video.h"
#include "cassette.h"
using namespace std;
 
int main(void)
{
                video val;
    cout << "input name video player: ";
    cin >> val;
    cassette album;
    album.name = "demo";
    album.duration = 90;
    val.insert(album);
    cout << "play: " << val.play() << endl;
    cout << "stop: " << val.stop() << endl;
    cout << "record: " << val.record() << endl;
    cout << "stop: " << val.stop() << endl;
    cout << "rewind: " << val.rewind(album.duration / 2) << endl;
    cout << "extract: " << val.extract() << endl;
    cout << "check: " << val.check() << endl;
    video oth;
    oth = val;
    oth.insert(album);
    cout << oth;
    return 0;
}
 
 
 
 
 
 
 
 
 
 
video.h
#include <iostream>
#include <string>
#include "cassette.h"
 
class video                           //контролер видеомагнитофона
{
public:
    video();
    video(const std::string&);
    video(const video&);
    ~video();
    video& operator= (const video&);                                 //оператор присвоения
    bool insert(const cassette&);                                  //вставить кассету
    bool extract();                                                 //извлечь кассету
    bool check() const;               //проверить наличие кассеты
    bool record();                                 //включить запись       
    bool play();                       //включить воспроизведение
    bool stop();                                     //выполнить останов
    bool rewind(size_t);          //перемотать кассету на заданный интервал времени
    friend std::istream& operator>> (std::istream&, video&);           //оператор ввода
    friend std::ostream& operator<< (std::ostream&, const video&);  //оператор вывода
private:
    void clear();            //вспомогательная функция для работы с кассетами
    cassette* v;                      //кассета
    int mode;             //режим работы
    enum {S, P, R};
    std::string name;               //название видеомагнитофона
 
};
 
inline bool video::check() const
{
    return v != NULL;
}
 
 
 
 
 
 
video.cpp
#include "video.h"
 
video::video(): v(NULL)
{
}
 
video::video(const std::string& n): v(NULL), mode(), name(n)
{
}
 
video::video(const video& oth): mode(oth.mode), name(oth.name)
{
    if (oth.v != NULL)
    v = new cassette(*oth.v);
}
video::~video()
{
    clear();
}
 
void video::clear()
{
    if (v != NULL)
    {
        delete v;
        v = NULL;
    }
}
 
video& video::operator= (const video& oth)
{
    if (this != &oth)
    {
        clear();
        if (oth.v != NULL)
           v = new cassette(*oth.v);
           mode = oth.mode;
           name = oth.name;
    }
    return *this;
}
bool video::insert(const cassette& oth)
{
    if (v != NULL)
        return false;
    else
        v = new cassette(oth);
    return true;
}
 
bool video::extract()
{
    if (v != NULL)
    {
        clear();
        return true; 
    }
    return false;
}
 
bool video::record()
{
    if ((v != NULL) && (v->time < v->duration))
    {
        mode = R;
        ++v->time;
        return true;
    }
    else
        return false;
}
 
bool video::play()
{
    if ((v != NULL) && (v->time < v->duration))
    {
        mode = P;
        ++v->time;
        return true;
    }
    else
        return false;
}
 
 
bool video::stop()
{
    if ((v != NULL) && (mode != S))
    {
        mode = S;
        return true;
    }
    else
        return false;
}
 
bool video::rewind(size_t t)
{
    if (t <= v->duration)
    {
        v->time = t;
        return true;
    }
    else
    {
        v->time = v->duration;
        return false;
    }
}
 
std::istream& operator>> (std::istream& stream, video& oth)
{
    stream >> oth.name;
    return stream;
}
 
std::istream& operator >> (std::istream& stream, video& oth)
{
             stream << oth.name;
             return stream;
}
 
 
 
 
 
 
cassette.h
#include <string>
 
struct cassette                 //кассета
{
    cassette();
    cassette(const cassette& oth);  
    std::string name;                                          //название кассеты
    size_t duration;                           //длительность кассеты
    size_t time;                     //текущий момент времени кассеты
};
 
cassette.cpp
#include "cassette.h"
 
cassette::cassette(): name(), duration(), time()
{
}
 
cassette::cassette(const cassette& oth): name(oth.name), 
    duration(oth.duration), time(oth.time)
{
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 00:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Модификация разработанного класса (C++):

Создать 2 объекта a и b, разработанного класса – символьная строка, реализовать перегрузку операции >= - C++
Нужно написать прогу, сам пытался но не смог. (желательно с обьяснением) Заранее спасибо! Создать 2 объекта a и b, разработанного...

Модификация объектов класса string - C++
ООП С++ Лафоре есть пример: // sstrchng.cpp // изменение частей строки #include &lt;iostream&gt; #include &lt;string&gt; using...

Модификация сортировки - C++
Ребят почему не сортируются двойки. Все сортируются а они впереди остаются. Просто задание в книжке чтоб пузырьковое сортирование...

Модификация программы - C++
Модифицируйте программу из данного раздела так, чтобы она подсчитывала не только буквы, но и встретившиеся пробелы, символы табуляции и...

Модификация программы - C++
Препод задал модифицировать программу. программа считает есть ли в последовательности цифры, которые больше, чем следующие. #include...

Модификация игр - C++
Всем привет! Суть вопроса: Какую игру выбрать для модификации, что бы понять основы игростроения. Детали ниже! :) Я достаточно...

2
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
18.01.2013, 01:29 #2
Если разрешён stl то предлагаю сделать list<string> logs и добавить функцию logAction(string) которая добавляет в список эту строку. Ну и дальше в каждом методе вызывать функцию эту logAction с конкретной строкой. Ну например:
C++
1
2
3
4
5
6
7
8
9
10
bool video::extract()
{
   logAction("Нажата кнопка извлечения кассеты");
    if (v != NULL)
    {
        clear();
        return true; 
    }
    return false;
}
ну или можешь более подробно писать действия дописывая успешно завершилось действие или нет.

Добавлено через 45 секунд
Ну а если не разрешён stl то допиши свой класс list с возможностью добавления новой строки в хвост, а так всё тоже самое
1
13Inferno13
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 25
18.01.2013, 02:10  [ТС] #3
А можно реализацию функции logAction
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2013, 02:10
Привет! Вот еще темы с ответами:

Модификация перезагрузки - C++
Программа рабочая вот такая #include &lt;iostream&gt; #include &lt;cstring&gt;//для strcpy(),strlen() using namespace std; #include...

WinPcap - модификация пакета - C++
Мне нужно перехватить определенный пакет, изменить его , и отослать уже браузеру. Подскажите, справится ли с этим WinPcap , или она только...

Модификация внутренней переменной лямбды - C++
Добрый вечер, что-то помню, что-то всплывает перед глазами в качестве кода - но не могу подобрать запрос в гугле, чтобы найти то о чём...

Задача о камнях (почти рюкзак) модификация) - C++
из камней весом p1, p2 ... pn набрать вес W если это возможно вывести yes, если не - no, но есть проблемка: в дополнение к задаче дается...


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

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

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