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/Vehicle.h | 66 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Week10/Exercise02/Vehicle.h (limited to 'Week10/Exercise02/Vehicle.h') 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 +#include + +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 */ -- cgit v1.3.1-23-gd82d