Cześć,
Mam problem przy stworzeniu obiektu, gdy tworzę obiekt klasy pochodnej(dziecko), odpala mi się w pierwszej kolejność konstruktor klasy bazowej(rodzica) a później dopiero efekt oczekiwany konstruktor dziecka. Nie rozumiem czemu tak się dzieje szczególnie że jeśli dobrze zrozumiałem dziedziczenie to żeby użyć konstruktora rodzica powinienem zrobić coś takiego Kierownik():Pracownik(){}? Efekt jaki chciałbym uzyskać to by przy tworzeniu się obiektu odpalił jedynie konstruktor dziecka. Z góry dziękuję jak znajdzie się ktoś kto wytłumaczy czemu tak się dzieje i powie czy da się osiągnąć przeze mnie zamierzony efekt. P.S. Mówię tu jedynie o momencie tworzenia się obiektu klasy kierownik, to że później sam tworze obiekt klasy pracownika jestem świadomy, ale nie tego to dotyczy.
Kod:
#include <iostream>
class Pracownik{
protected:
std::string imie;
std::string nazwisko;
int nip;
int dataUrodzenia;
int dataZatrudnienia;
int pensja;
std::string dzial;
public:
Pracownik(){
std::cout<<"Podaj imie pracownika: ";
std::cin>>imie;
std::cout<<"Podaj nazwisko pracownika: ";
std::cin>>nazwisko;
std::cout<<"Podaj nip pracownika: ";
std::cin>>nip;
std::cout<<"Podaj date urodzenia pracownika(forma:(17052022)): ";
std::cin>>dataUrodzenia;
std::cout<<"Podaj date zatrudnienia pracownika(forma:(17052022)): ";
std::cin>>dataZatrudnienia;
std::cout<<"Podaj pensje pracownika: ";
std::cin>>pensja;
std::cout<<"Podaj dział pracownika: ";
std::cin>>dzial;
}
virtual void wyswietlDane(){
std::cout<<imie<<" "<<nazwisko<<" "<<dzial<<" nip: "<<nip<<std::endl<<"Data urodzenia: "<<dataUrodzenia<<std::endl<<"Zatrudniony od: "<<dataZatrudnienia<<std::endl<<"Pensja: "<<pensja<<std::endl;
}
};
class Kierownik : public Pracownik{
protected:
int iloscPodwladnych;
std::string typKierownictwa;
int dodatekFunkcyjny;
public:
Kierownik(){
std::cout<<"Podaj imie kierownika: ";
std::cin>>imie;
std::cout<<"Podaj nazwisko kierownika: ";
std::cin>>nazwisko;
std::cout<<"Podaj nip kierownika: ";
std::cin>>nip;
std::cout<<"Podaj date urodzenia kierownika(forma:(17052022)): ";
std::cin>>dataUrodzenia;
std::cout<<"Podaj date zatrudnienia kierownika(forma:(17052022)): ";
std::cin>>dataZatrudnienia;
std::cout<<"Podaj pensje kierownika: ";
std::cin>>pensja;
std::cout<<"Podaj dzial kierownika: ";
std::cin>>dzial;
std::cout<<"Podaj ilosc podwladnych kierownika: ";
std::cin>>iloscPodwladnych;
std::cout<<"Podaj typ kierownictwa: ";
std::cin>>typKierownictwa;
std::cout<<"Podaj dodatek funkcyjny kierownika: ";
std::cin>>dodatekFunkcyjny;
}
void wyswietlDane(){
std::cout<<typKierownictwa<<std::endl;
Pracownik::wyswietlDane();
std::cout<<"Dodatek funkcyjny: "<<dodatekFunkcyjny<<std::endl<<"Liczba podwladnych: "<<iloscPodwladnych<<std::endl;
}
Pracownik* zatrudnijPracownika(){
++iloscPodwladnych;
Pracownik * Jacus = new Pracownik;
return Jacus;
}
};
int main(){
Kierownik szefuncio;
Pracownik * Jacus = szefuncio.zatrudnijPracownika();
Jacus -> wyswietlDane();
}
Edit: Z tego co doczytałem Sobie konstruktor klasy pochodnej zawsze wywołuje konstruktor klasy bazowej, więc zostaje moje pytanie czy da się jakkolwiek to ominąć, żeby nie wywoływał się ten konstruktor klasy bazowej.