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
|
#include "CombinedTrip.h"
#include <cstring>
#include <iostream>
void CombinedTrip::free() {
for (unsigned i = 0; i < destinationsCount; i++)
delete[] destinations[i];
delete[] destinations;
}
void CombinedTrip::copyFrom(const CombinedTrip& other) {
destinationsCount = other.destinationsCount;
destinations = new char*[destinationsCount];
for (unsigned length = 0, i = 0; i < destinationsCount; i++) {
length = strlen(other.destinations[i]);
destinations[i] = new char[length + 1];
strncpy(destinations[i], other.destinations[i], length + 1);
}
}
CombinedTrip::CombinedTrip(RegNumb carRegNumb, unsigned carTravelDistance, unsigned carTravelDuration, const char* flightNumber, unsigned flightDuration, const char** destinations, unsigned destinationsCount, unsigned freeTime) : carTravel(carRegNumb, carTravelDistance, carTravelDuration), airTravel(flightNumber, flightDuration) {
if (destinations == nullptr) {
destinations = nullptr;
destinationsCount = freeTime = 0;
return;
}
this->destinationsCount = destinationsCount;
this->destinations = new char*[destinationsCount];
for (unsigned length = 0, i = 0; i < destinationsCount; i++) {
length = strlen(destinations[i]);
this->destinations[i] = new char[length + 1];
strncpy(this->destinations[i], destinations[i], length + 1);
}
this->freeTime = freeTime;
}
unsigned CombinedTrip::getDuration() const {
return carTravel.getDuration() + freeTime + airTravel.getDuration();
}
void CombinedTrip::print() {
std::cout << "Air Travel || Flight number: " << airTravel.getFlightNumber() << " | Duration: " << airTravel.getDuration() << std::endl;
std::cout << "Car Travel || Registry number: " << carTravel.getRegNumb() << carTravel.getRegNumb() << " | Durationt: " << carTravel.getDuration() << " | Distance: " << carTravel.getDistance();
std::cout << "Free time: " << freeTime << std::endl << "Destinations: ";
for (unsigned i = 0; i < destinationsCount; i++)
std::cout << destinations[i] << std::endl;
}
CombinedTrip::CombinedTrip() : CombinedTrip(RegNumb(), 0, 0, "", 0, nullptr, 0, 0) {}
CombinedTrip::CombinedTrip(const CombinedTrip& ct) {
copyFrom(ct);
}
CombinedTrip& CombinedTrip::operator=(const CombinedTrip& ct) {
if (this != &ct) {
free();
copyFrom(ct);
}
return *this;
}
CombinedTrip::~CombinedTrip() {
free();
}
|