Website Summary Files Commits Branches @commit @diff @stats
path: root / Week10 / Exercise02 / main.cpp
diff options
context:
space:
mode:
Commit7546f0d0da487e16f0a8671c09a46e1cee2bc03a (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-05-02 14:57:36 +0300
Committer
 Syndamia <kamen@syndamia.com>
2026-05-02 14:57:36 +0300
Files6462868cebe114a87ca38252af9a49bce6603286 /Week10/Exercise02/main.cpp
oop-2025-solutions-7546f0d0da487e16f0a8671c09a46e1cee2bc03a.tar
oop-2025-solutions-7546f0d0da487e16f0a8671c09a46e1cee2bc03a.tar.gz
oop-2025-solutions-7546f0d0da487e16f0a8671c09a46e1cee2bc03a.zip
Parentc98c633b7087e3c52f4b05236f3509a9ec5f2bba (diff)
feat(Week10): Add solutions
1 files changed, 57 insertions, 0 deletions
-rw-r--r--Week10/Exercise02/main.cpp57
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 <iostream>
+
+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;
+}