lista inicjalizacyjna pól z klasy nadrzędnej;

0

Witam,
Jeśli mam dwie klasy z gdzie jedna dziedziczy pola z drugiej i chcę zainicjalizować za pomocą listy inicjalizacyjnej konstruktora klasy podrzędnej to mogę to jakoś zrobić w inny sposób niż wywołanie konstruktora klasy nadrzędnej w liście inicjalizacyjnej?
Prosze o pomoc, dzięki z góry

0

Nie wiem czy dobrze rozumiem pytanie, ale jesli masz klase lektura i jest ona pochodna klasy ksiazka i dziedziczy np skladowe takie jak okladka, strony itd publicznie, to w klasie lektura mozesz zainicjalizowac te skladowe, bo one naleza od momentu dziedziczenia do tej klasy. Konstruktor klasy pierwotnej tak czy owak tez sie uruchamia, bo lektura jest ksiazka.

0

Tylko jeżeli składowe są prywatne to nie ma innego sposobu niż przez odpalenie konstruktora z odpowiednimi parametrami z listy inicjalizacyjnej.

0

mogę chyba te pola zainicjować normalnie, ale fragment polecenia jest dokładnie taki:

Do każdej z klas dodaj konstruktor parametrowy. Osoba – konstruktor z 2 parametrami, Komputerowiec – konstruktor z 1 parametrem, Pracownik – konstruktor z 3 parametrami, NauczycielPolskiego – konstruktor z 4 parametrami, Programista i Student – konstruktor z 5 parametrami. Niech każdy z nich wypisuje na ekran, z jakiej jest klasy oraz wartości swoich parametrów. Niech również ustawia wartości pól. Dla inicjalizacji pól z klas nadrzędnych użyj listy inicjalizacyjnej.

Kod na którym mam to coś zrobić dostaliśmy od prowadzącego

 
#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

// Klasa Ksiazka
class Ksiazka{
private:
    string tytul;
public:
    void settytul(string tytul){
        this->tytul=tytul;
    }
    string gettytul(){
        return tytul;
    }
    Ksiazka(){
        cout << "Konstruktor bezparametrowy z Ksiazka" << endl;
    }
    ~Ksiazka(){
        cout << "Destruktor z Ksiazka" << endl;
    }
};

// Klasa Osoba
class Osoba{
protected:
    string imie;
    string nazwisko;
public:
    void setimie(string imie){
        this->imie=imie;
    }
    void setnazwisko(string nazwisko){
        this->nazwisko=nazwisko;
    }
    string getimie(){
        return imie;
    }
    string getnazwisko(){
        return nazwisko;
    }
    Osoba(){
        cout << "Konstruktor bezparametrowy z Osoba" << endl;
    }
    ~Osoba(){
        cout << "Destruktor z Osoba" << endl;
    }
};

// Klasa Pracownik
class Pracownik:public Osoba{
protected:
    double zarobki;
public:
    void setzarobki(double zarobki){
        this->zarobki=zarobki;
    }
    double getzarobki(){
        return zarobki;
    }
    Pracownik(){
        cout << "Konstruktor bezparametrowy z Pracownik" << endl;
    }
    ~Pracownik(){
        cout << "Destruktor z Pracownik" << endl;
    }
};


// klasa Komputerowiec
class Komputerowiec{
protected:
    string ulubionesrodowisko;
public:
    void setulubionesrodowisko(string ulubionesrodowisko){
        this->ulubionesrodowisko=ulubionesrodowisko;
    }
    string getulubionesrodowisko(){
        return ulubionesrodowisko;
    }
    Komputerowiec(){
        cout << "Konstruktor bezparametrowy z Komputerowiec" << endl;
    }
    ~Komputerowiec(){
        cout << "Destruktor z Komputerowiec" << endl;
    }
};

class Student:public Osoba, public Komputerowiec{
private:
    int nralbumu;
    Ksiazka ksiazka;
public:
    void setnralbumu(int nralbumu){
        this->nralbumu=nralbumu;
    }
    int getnralbumu(){
        return nralbumu;
    }
    void setKsiazka(Ksiazka ksiazka){
        this->ksiazka=ksiazka;
    }
    Ksiazka getKsiazka(){
        return ksiazka;
    }
    Student(){
        cout << "Konstruktor bezparametrowy z Student" << endl;
    }
    ~Student(){
        cout << "Destruktor z Student" << endl;
    }
};


// Klasa Programista
class Programista:public Pracownik, public Komputerowiec{
private:
    string ulubionyjezyk;
public:
    void setulubionyjezyk(string ulubionyjezyk){
        this->ulubionyjezyk=ulubionyjezyk;
    }
    string getulubionyjezyk(){
        return ulubionyjezyk;
    }
    Programista(){
        cout << "Konstruktor bezparametrowy z Programista" << endl;
    }
    ~Programista(){
        cout << "Destruktor z Programista" << endl;
    }
};


class NauczycielPolskiego:public Pracownik{
private:
    Ksiazka ksiazki[10];
public:
    void setKsiazki(Ksiazka ksiazki[10]){
        for(int i=0; i<10; ++i)
            this->ksiazki[i]=ksiazki[i];
    }
    Ksiazka getUlubionaKsiazka(){
        return ksiazki[0];
    }
    NauczycielPolskiego(){
        cout << "Konstruktor bezparametrowy z NauczycielPolskiego" << endl;
    }
    ~NauczycielPolskiego(){
        cout << "Destruktor z NauczycielPolskiego" << endl;
    }
};

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


    system("PAUSE");
    return 0;
}

więc nie wiem czy w klasach nadrzędnych muszę zrobić konstruktory obok tych podanych w treści zadania (bo one chyba z tego co rozumiem mają przyjmować jakieś parametry ale nie inicjować nimi pól) z parametrami które inicjują pola przyjmowanymi argumentami, czy jakoś inaczej...

0

To jedyny sposób, z tym że te konstruktory mogą być protected.

0

Ok, dzięki za odpowiedź;) Pozdrawiam

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