Witam, wraz z probami implementacji projektu, natknalem sie na problem dotyczacy tworzenia obiektow, gdzie mamy nie jedna a np. klasy abstrakcyjne. Ponizej diagram, ktory probuje zaimplementowac:
W powyzszym diagramie, klasa zarowno Vehicle i MotoVehicle sa abstrakcyjne. Napotykam problem w momencie gdy chce utworzyc np, obiekt klasy Car. Ponizej pliki naglowkowe.
class Vehicle
{
private:
std::string model;
public:
Vehicle();
//blokada niejawnej konwersji
explicit Vehicle(std::string model);
std::string getModel() const;
//metody czysto wirtualne
virtual double getPriceRent() = 0;
virtual std::string toString() = 0;
virtual double getBasePrice() = 0;
virtual ~Vehicle();
};
class MotoVehicle : public Vehicle
{
private:
double capacity;
public:
MotoVehicle();
MotoVehicle(const Vehicle & veh, double capacity);
double getCapacity();
virtual std::string toString() = 0;
virtual double getPriceRent() = 0;
virtual double getBasePrice() = 0;
virtual ~MotoVehicle();
};
class Car : public MotoVehicle
{
private:
enum class Segment { A, B, C, D, E};
Segment s;
public:
Car();
Car(const MotoVehicle & mv, Segment seg);
double getBasePrice();
double getPriceRent();
std::string toString();
virtual ~Car();
};
W momencie gdy wywoluje
Vehicle * veh = new Car();
Tworzony jest poprawnie pojazd lecz jedynie wykorzystujac konstruktory domyslne, zdefiniowane dla powyzszej hierarchi. Jak moglbym sprawic aby moc przekazac do konstruktora Car np, parametr inicjalizujacy pole model, poniewaz w momencie gdy chcialem przedefiniowac konstruktor klasy Car i dodac ustawianie modelu, dostawalem komunikat dotyczacy proby dostepu do prywatnego pola typu model. Z gory dziekuje za wskazowki.