Website Summary Files Commits Branches @commit @diff @stats
path: root / Week10 / Exercise02 / Vehicle.h
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/Vehicle.h
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, 66 insertions, 0 deletions
-rw-r--r--Week10/Exercise02/Vehicle.h66
diff --git a/Week10/Exercise02/Vehicle.h b/Week10/Exercise02/Vehicle.h
new file mode 100644
index 0000000..206e1b5
--- /dev/null
+++ b/Week10/Exercise02/Vehicle.h
@@ -0,0 +1,66 @@
+#ifndef _VEHICLE
+#define _VEHICLE
+
+#include <istream>
+#include <ostream>
+
+const unsigned MODEL_LENGTH = 1024;
+
+class Vehicle {
+ char model[MODEL_LENGTH];
+ unsigned yearOfManufacture;
+ double mileage;
+ unsigned short ecoCategory;
+ double weight;
+ double horsePower;
+
+
+public:
+ Vehicle();
+
+ const char* GetModel() const;
+ void SetModel(char model[MODEL_LENGTH]);
+
+ unsigned GetYearOfManufacture() const;
+ void SetYearOfManufacture(unsigned yearOfManufacture);
+
+ double GetMileage() const;
+ void SetMileage(double mileage);
+
+ unsigned short GetEcoCategory() const;
+ void SetEcoCategory(unsigned short ecoCategory);
+
+ double GetWeight() const;
+ void SetWeight(double weight);
+
+ double GetHorsePower() const;
+ void SetHorsePower(double horsePower);
+
+ // Имаме всички нужни селектори и мутатори, за да не се нуждаем
+ // от това операторите да са friend. Но въпреки това ще го
+ // имплементираме така.
+
+ friend std::ostream& operator<<(std::ostream& ostr, const Vehicle& vehicle);
+ friend std::istream& operator>>(std::istream& istr, Vehicle& vehicle);
+
+ // След като създадем динамично-заделен обект от
+ // клас наследник, можем да конвертираме указателя към
+ // базовия клас (т.е. CombustionVehicle* да стане Vehicle*).
+ // В този случай, ще имаме налични само нещата, които са
+ // достъпни във Vehicle, включително деструктора.
+ //
+ // Но CombustionVehicle има още член-данни, как ще разберем,
+ // че Vehicle* е всъщност CombustionVehicle*?
+ // Коректното решение, като стигнем до там, е да използваме
+ // виртуални деструктури.
+ //
+ // Текущото решение, което можем да направим, е да запазваме
+ // някаква допълнителна стойност, която е различна спрямо
+ // конкретния клас (наследник). След това ще правим проверки по
+ // нея, дали съответства на тази на даден клас, и ако да, конвертираме.
+protected:
+ unsigned type;
+};
+
+
+#endif /* _VEHICLE */