Problem z protected/ niedozwolone odwołanie

0

Wszystko działa oprócz tego co nie działa.
Nie wiem dlaczego nie moge stworzyć obiektu
samochod car_deflaut; nosense

#include <iostream>
using namespace std;

class samochod {
protected:
    int stan, paliwo, spalanie, pojemnosc_baku, przebieg;
    int uruchom_silnik();
    void zatrzymaj_silnik();
    int jedz(unsigned);
    void tankuj(int);
    void prezentuj();

    samochod(int domyslny = 0)
        : stan(domyslny)
        , paliwo(100)
        , spalanie(10)
        , pojemnosc_baku(200)
        , przebieg(1500)
    {
        cout << "Start(domyslny)\n";
    };
    samochod(int stan_, int paliwo_, int spalanie_, int pojemnosc_baku_,
        int przebieg_)
        : stan(stan_)
        , paliwo(paliwo_)
        , spalanie(spalanie_)
        , przebieg(przebieg_)
        , pojemnosc_baku(pojemnosc_baku_)
    {
        cout << "Start:\n";
        prezentuj();
    }
    samochod(const samochod& kopia_sam)
        : stan(kopia_sam.stan)
        , paliwo(kopia_sam.paliwo)
        , spalanie(kopia_sam.spalanie)
        , pojemnosc_baku(kopia_sam.pojemnosc_baku)
        , przebieg(kopia_sam.przebieg)
    {
        cout << "Kopia car\n";
        prezentuj();
    }
    ~samochod() { cout << "koniec\n"; }
};

void samochod::prezentuj()
{
    cout << "stan:" << stan << endl;
    cout << "paliwo:" << paliwo << endl;
    cout << "spalanie:" << spalanie << endl;
    cout << "pojemnosc_baku:" << pojemnosc_baku << endl;
    cout << "przebieg:" << przebieg << endl;
}

class samochod_osobowy : public samochod {
public:
    int ilosc_miejsc;
    samochod_osobowy(int domyslny = 4)
        : samochod()
        , ilosc_miejsc(domyslny){};

    samochod_osobowy(int stan_, int paliwo_, int spalanie_, int pojemnosc_baku_,
        int przebieg_, int ilosc_miejsc_)
        : samochod(stan_, paliwo_, spalanie_, pojemnosc_baku_,
              przebieg_)
        , ilosc_miejsc(ilosc_miejsc_){};

    void prezentuj()
    {
        samochod::prezentuj();
        cout << "ilosc miejsc:" << ilosc_miejsc << endl;
    }
    samochod_osobowy(const samochod_osobowy& kopia_samochod_osobowy)
        : samochod(kopia_samochod_osobowy)
        , ilosc_miejsc(kopia_samochod_osobowy.ilosc_miejsc)
    {
        cout << "Konstruktor kopiujacy sam_osob\n\n";
        prezentuj();
    }
    ~samochod_osobowy() { cout << "koniec_sam_osob.\n"; }
};

class samochod_ciezarowy : public samochod {
public:
    int max_ladownosc;
    int ladunek;
    void laduj(int);
    void rozladuj(int);

    samochod_ciezarowy(int domyslna1 = 40, int domyslna2 = 35)
        : samochod()
        , max_ladownosc(domyslna1)
        , ladunek(domyslna2){};
    samochod_ciezarowy(int stan_, int paliwo_, int spalanie_, int pojemnosc_baku_,
        int przebieg_, int ilosc_miejsc_, int max_ladownosc_, int ladunek_)
        : samochod(stan_, paliwo_, spalanie_, pojemnosc_baku_,
              przebieg_)
        , max_ladownosc(max_ladownosc_)
        , ladunek(ladunek_){};
    samochod_ciezarowy(const samochod_ciezarowy& kopia_sam_ciez)
        : samochod(kopia_sam_ciez)
        , max_ladownosc(kopia_sam_ciez.max_ladownosc)
        , ladunek(kopia_sam_ciez.ladunek)
    {
        cout << "Kostruktor kopiujacy sam_ciez\n\n";
        prezentuj();
    }
    void prezentuj()
    {
        samochod::prezentuj();
        cout << "max_ladownosc:" << max_ladownosc << endl;
        cout << "ladunek:" << ladunek << "\n\n";
    }
    ~samochod_ciezarowy() { cout << "koniec_sam_ciez.\n"; }
};
void samochod_ciezarowy::laduj(int ilosc_ton)
{
    if (ilosc_ton + ladunek <= max_ladownosc)
        ladunek += ilosc_ton;
    else
        cout << "nie moge tego zrobic\n";
}
void samochod_ciezarowy::rozladuj(int ilosc_ton)
{
    if (ladunek - ilosc_ton < 0)
        cout << "nie moge tego zrobic\n";
    else
        ladunek -= ilosc_ton;
}

int main(int argc, char** argv)
{

    string wybor;
    samochod car_deflaut;
    //samochod car(0, 200, 20, 1000, 2300);
    //samochod car_copy(car);
    samochod_osobowy car_osobowy_deflaut;
    samochod_osobowy car_osobowy(0, 200, 20, 1000, 2300, 7);
    samochod_osobowy car_osobowy_copy(car_osobowy);
    samochod_ciezarowy car_ciezarowy;
    samochod_ciezarowy car_ciezarowy_copy(car_ciezarowy);
    car_ciezarowy.rozladuj(35);
    car_ciezarowy.prezentuj();
    car_ciezarowy_copy.prezentuj();

    return 0;
}

0

Będzie tu próba użycia domyślnego konstruktora, który jest protected, a więc nie jest on widoczny w funkcji main.

0

Inne klasy mają dostępne publiczne ctory więc nie ma problemu, bo korzystają z protected klasy bazowej, natomias próbując utworzyć obiekt klasy Samocho próbujesz wywołać chroniony ctor, który traktowany jest jak prywatny poza klasami potomnymi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1