• 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
70 wizyt
pytanie zadane 3 stycznia w C i C++ przez użytkownika sh1nen Obywatel (1,490 punkty)

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 użytkownika maly Nałogowiec (36,030 punkty)
Zmień model z private na protected.
0 głosów
odpowiedź 3 stycznia przez użytkownika Criss Szeryf (92,260 punkty)

 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 55 wizyt
pytanie zadane 10 stycznia w C i C++ przez użytkownika devi Początkujący (320 punkty)
0 głosów
2 odpowiedzi 136 wizyt
0 głosów
2 odpowiedzi 137 wizyt
...