From 7546f0d0da487e16f0a8671c09a46e1cee2bc03a Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sat, 2 May 2026 14:57:36 +0300 Subject: feat(Week10): Add solutions --- Week10/Exercise02/main.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Week10/Exercise02/main.cpp (limited to 'Week10/Exercise02/main.cpp') diff --git a/Week10/Exercise02/main.cpp b/Week10/Exercise02/main.cpp new file mode 100644 index 0000000..980b9b2 --- /dev/null +++ b/Week10/Exercise02/main.cpp @@ -0,0 +1,57 @@ +#include "Vehicle.h" +#include "CombustionVehicle.h" +#include "ElectricVehicle.h" +#include + +int main() { + unsigned N; + std::cin >> N; + + Vehicle** vehicles = new Vehicle*[N]; + for (unsigned i = 0; i < N; ++i) { + char type; + std::cin >> type; + std::cin.ignore(); + + if (type == 'c') { + CombustionVehicle* vehicle = new CombustionVehicle; + std::cin >> *vehicle; + vehicles[i] = vehicle; + } + else if (type == 'e') { + ElectricVehicle* vehicle = new ElectricVehicle; + std::cin >> *vehicle; + vehicles[i] = vehicle; + } + else { + vehicles[i] = nullptr; + } + } + + for (unsigned i = 0; i < N; ++i) { + if (vehicles[i] != nullptr) + std::cout << *vehicles[i]; + } + + for (unsigned i = 0; i < N; ++i) { + if (vehicles[i] == nullptr) { + continue; + } + // Това го правим, защото delete само вижда че обекта е "Vehicle", + // не вижда допълнителната памет, която се заделя за допълнителните + // член-данни, които запазваме при Combustion и Electric. + + else if (CombustionVehicle::IsCombustionVehicle(*vehicles[i])) { + delete (CombustionVehicle*)vehicles[i]; + } + else if (ElectricVehicle::IsElectricVehicle(*vehicles[i])) { + delete (ElectricVehicle*)vehicles[i]; + } + else { + delete vehicles[i]; + } + } + delete[] vehicles; + + return 0; +} -- cgit v1.3.1-23-gd82d