Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Object-oriented Programming / Exam 2 / ex1 / CombinedTrip.cpp
blob: dbe315b28d78eb30990d18e1ef767c75a950e242 (plain) (blame)
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();
}