• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie obiektow - wielopoziomowa hierachia klas.

0 głosów
77 wizyt
pytanie zadane 3 stycznia w C i C++ przez sh1nen Obywatel (1,570 p.)

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.

2 odpowiedzi

0 głosów
odpowiedź 3 stycznia przez maly Nałogowiec (37,370 p.)
Zmień model z private na protected.
0 głosów
odpowiedź 3 stycznia przez Criss VIP (115,800 p.)

 Jak moglbym sprawic aby moc przekazac do konstruktora Car np, parametr inicjalizujacy pole model

 W liście inicjalizacyjnej możesz przekazywać argumenty do konstruktorów klas bazowych.

Np.:

struct A
{
   explicit A(int) { }
};

struct B : public A
{
   B(int x) : A(x) { }
};

//...

B(5);

 

Podobne pytania

0 głosów
4 odpowiedzi 63 wizyt
pytanie zadane 10 stycznia w C i C++ przez devi Początkujący (320 p.)
0 głosów
2 odpowiedzi 160 wizyt
0 głosów
2 odpowiedzi 145 wizyt
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,636 zapytań

76,523 odpowiedzi

149,475 komentarzy

18,086 pasjonatów

Przeglądających: 214
Pasjonatów: 10 Gości: 204

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...