-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtriathlon.cpp
105 lines (95 loc) · 4.36 KB
/
triathlon.cpp
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
/*
* Andrea Favero
* 1125545
*/
#include "triathlon.h"
#include "errori.h"
#include <typeinfo>
Triathlon::Triathlon(std::shared_ptr<Persona> atleta, unsigned int durata,
Data data, unsigned int mgMagnesio,
unsigned int vascheLibero, unsigned int vascheRana,
unsigned int vascheDorso, unsigned int kmSterrato,
unsigned int kmStrada, unsigned int kmSalita,
unsigned int kmPianura, unsigned int kmDiscesa)
try: Allenamento(atleta, durata, data, mgMagnesio),
Nuoto(atleta, durata, data, mgMagnesio, vascheLibero, vascheRana, vascheDorso),
Ciclismo(atleta, durata, data, mgMagnesio, kmSalita, kmPianura, kmDiscesa),
Corsa(atleta, durata, data, mgMagnesio, kmSterrato, kmStrada)
{} catch(...) { //catch di tutte le eccezioni lanciate dai costruttori dei sottooggetti
throw;
}
std::string Triathlon::tipo() const {
return "Triathlon";
}
Triathlon* Triathlon::clone() const {
return new Triathlon(*this);
}
unsigned int Triathlon::calorie() const {
return
// calorie nuoto
Nuoto::calorie() / 2
+
// calorie ciclismo
Ciclismo::calorie() / 2
+
// calorie corsa
Corsa::calorie() / 2;
}
unsigned int Triathlon::grassoPerso() const {
return Nuoto::grassoPerso() + Ciclismo::grassoPerso() + Corsa::grassoPerso();
}
unsigned int Triathlon::saliMinerali() const {
return Nuoto::saliMinerali() + Ciclismo::saliMinerali() + Corsa::saliMinerali();
}
bool Triathlon::operator==(const Allenamento& al) const {
try {
if(typeid(al) == typeid(const Triathlon&))
return Allenamento::operator==(al) &&
getVascheRana() == (dynamic_cast<const Nuoto&>(al)).getVascheRana() &&
getVascheStileLibero() == (dynamic_cast<const Nuoto&>(al)).getVascheStileLibero() &&
getVascheDorso() == (dynamic_cast<const Nuoto&>(al)).getVascheDorso() &&
getKmSalita() == (dynamic_cast<const Ciclismo&>(al)).getKmSalita() &&
getKmDiscesa() == (dynamic_cast<const Ciclismo&>(al)).getKmDiscesa() &&
getKmPianura() == (dynamic_cast<const Ciclismo&>(al)).getKmPianura() &&
getKmStrada() == (dynamic_cast<const Corsa&>(al)).getKmStrada() &&
getKmSterrato() == (dynamic_cast<const Corsa&>(al)).getKmSterrato();
return false;
} catch (std::bad_cast e) {
return false;
}
}
bool Triathlon::operator>=(const Allenamento& al) const {
try {
if(typeid(al) == typeid(const Triathlon&))
return Allenamento::operator>=(al) &&
getVascheRana() >= (dynamic_cast<const Nuoto&>(al)).getVascheRana() &&
getVascheStileLibero() >= (dynamic_cast<const Nuoto&>(al)).getVascheStileLibero() &&
getVascheDorso() >= (dynamic_cast<const Nuoto&>(al)).getVascheDorso() &&
getKmSalita() >= (dynamic_cast<const Ciclismo&>(al)).getKmSalita() &&
getKmDiscesa() >= (dynamic_cast<const Ciclismo&>(al)).getKmDiscesa() &&
getKmPianura() >= (dynamic_cast<const Ciclismo&>(al)).getKmPianura() &&
getKmStrada() >= (dynamic_cast<const Corsa&>(al)).getKmStrada() &&
getKmSterrato() >= (dynamic_cast<const Corsa&>(al)).getKmSterrato();
return false;
} catch (std::bad_cast e) {
return false;
}
}
bool Triathlon::operator<=(const Allenamento& al) const {
try {
if(typeid(al) == typeid(const Triathlon&))
return Allenamento::operator<=(al) &&
getVascheRana() <= (dynamic_cast<const Nuoto&>(al)).getVascheRana() &&
getVascheStileLibero() <= (dynamic_cast<const Nuoto&>(al)).getVascheStileLibero() &&
getVascheDorso() <= (dynamic_cast<const Nuoto&>(al)).getVascheDorso() &&
getKmSalita() <= (dynamic_cast<const Ciclismo&>(al)).getKmSalita() &&
getKmDiscesa() <= (dynamic_cast<const Ciclismo&>(al)).getKmDiscesa() &&
getKmPianura() <= (dynamic_cast<const Ciclismo&>(al)).getKmPianura() &&
getKmStrada() <= (dynamic_cast<const Corsa&>(al)).getKmStrada() &&
getKmSterrato() <= (dynamic_cast<const Corsa&>(al)).getKmSterrato();
return false;
} catch (std::bad_cast e) {
return false;
}
}