-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdog.cpp
More file actions
115 lines (98 loc) · 3.26 KB
/
Copy pathdog.cpp
File metadata and controls
115 lines (98 loc) · 3.26 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
#include "dog.h"
// По умолчанию ставятся такие параметры
Dog::Dog()
:m_name("Dog"), m_breed(0), m_disease(0)
{}
Dog::Dog(const QString &name, int breed, int disease)
:m_name(name), m_breed(breed), m_disease(disease)
{}
Dog::Dog(const Dog &cat)
{
m_name = cat.m_name;
m_breed = cat.m_breed;
m_disease = cat.m_disease;
}
Dog &Dog::operator=(const Dog &cat)
{
if (this != &cat) {
m_name = cat.m_name;
m_breed = cat.m_breed;
m_disease = cat.m_disease;
}
return *this;
}
// Так как нет сырых указателей, не надо вручную очищать память
Dog::~Dog()
{}
void Dog::read(const QJsonObject &json)
{
if (json.contains("name") && json["name"].isString()) {
m_name = json["name"].toString();
}
// Так как внутри класса данные хранятся в виде индекса на массив
// а в файле в виде строки идёт конвертация
if (json.contains("breed") && json["breed"].isString()) {
QString tmpBreed = json["breed"].toString();
m_breed = findIdx(tmpBreed, dogsBreeds, DOGS_BREEDS_SIZE);
}
// Так как внутри класса данные хранятся в виде индекса на массив
// а в файле в виде строки идёт конвертация
if (json.contains("disease") && json["disease"].isString()) {
QString tmpDisease = json["disease"].toString();
m_disease = findIdx(tmpDisease, dogsDisease, DOGS_DISEASE_SIZE);
}
}
void Dog::write(QJsonObject &json) const
{
json["who"] = "dog";
json["name"] = m_name;
// Так как внутри класса данные хранятся в виде индекса на массив
// а в файле в виде строки идёт конвертация
json["breed"] = dogsBreeds[m_breed];
// Так как внутри класса данные хранятся в виде индекса на массив
// а в файле в виде строки идёт конвертация
json["disease"] = dogsDisease[m_disease];
}
void Dog::setName(const QString &newName)
{
m_name = newName;
}
// Установка породы с валидацией
void Dog::setBreed(int newBreed)
{
validateBreed(newBreed);
m_breed = newBreed;
}
// Установка болезни с валидацией
void Dog::setDisease(int newDisease)
{
validateDisease(newDisease);
m_disease = newDisease;
}
void Dog::print() const
{
QTextStream out(stdout);
out << m_name << " -- " << dogsBreeds[m_breed] << " -- " << dogsDisease[m_disease];
}
void Dog::printBreeds()
{
QTextStream out(stdout);
for (int i = 0; i < DOGS_BREEDS_SIZE; ++i){
out << QString::number(i + 1) + ". "<< dogsBreeds[i] << Qt::endl;
}
}
void Dog::printDisease()
{
QTextStream out(stdout);
for (int i = 0; i < DOGS_DISEASE_SIZE; ++i){
out << QString::number(i + 1) + ". "<< dogsDisease[i] << Qt::endl;
}
}
void Dog::validateBreed(int breed)
{
Q_ASSERT(0 <= breed && breed < DOGS_BREEDS_SIZE);
}
void Dog::validateDisease(int disease)
{
Q_ASSERT(0 <= disease && disease < DOGS_DISEASE_SIZE);
}