Czy klasa pochodna musi mieć konstruktor z argumentami, jeśli klasa bazowa ma konstruktor z argumentami?
Nie, nie musi.
Przyklad:
class dupa
{
protected:
int rozmiar;
public:
dupa(int r=0) : rozmiar(r) {}
~dupa() {}
};
class gosc : public dupa
{
public:
gosc() {}
~gosc() {}
};
Kurcze nie dopisalem.
Jak nie chcesz miec domyslnego parametru konstrujktora w tym przykladzie to dajesz wywolanie konstruktora klasy dupa na liscie inicjalizacyjnej klasy gosc, czyli tak:
class dupa
{
protected:
int rozmiar;
public:
dupa(int r) : rozmiar(r) {}
~dupa() {}
};
class gosc : public dupa
{
public:
gosc() : dupa(2) {}
~gosc() {}
};
Jak nie wywolasz konstruktora to kompilator zwroci Ci blad.
a co z dziedziczeniem wielobazowym? tak samo? czy gdy konstruktor którejś klasy bazowej ma argumenty, to i konstruktor klasy pochodnej musi mieć argumenty? rozumiem, że w dziedziczeniu po wszystkich klasach bazowych, tryby dziedziczenia mogą być różne?
szewciu napisał(a)
a co z dziedziczeniem wielobazowym? tak samo? czy gdy konstruktor którejś klasy bazowej ma argumenty, to i konstruktor klasy pochodnej musi mieć argumenty? rozumiem, że w dziedziczeniu po wszystkich klasach bazowych, tryby dziedziczenia mogą być różne?
Chodzi o to zeby wywolac na liscie inicjalizacyjnej konstruktory klas bazowych jesli przyjmuja parametry, a klasa pochodna moze miec wtedy dowolny konstruktor:
class dupa
{
protected:
int rozmiar;
public:
dupa(int r) : rozmiar(r) {}
~dupa() {}
};
class brzuch
{
protected:
int bo;
public:
brzuch(int r) : bo(r) {}
};
class gosc : private dupa, private brzuch
{
public:
gosc() : dupa(2), brzuch(2) {}
~gosc() {}
};
Rozumiem, dziękuję za sprecyzowanie odpowiedzi na mój problem.