#include #include using namespace std; // Klasa bazowa Osoba class Osoba { protected: string imie; string nazwisko; int wiek; public: // Konstruktor argumentowy Osoba(string im, string naz, int w) : imie(im), nazwisko(naz), wiek(w) {} // Destruktor virtual ~Osoba() { cout << "Usuwam osobe " << imie << " " << nazwisko << endl; } // Metoda do wyświetlania danych osoby void pokazDane() { cout << "Osoba: " << imie << " " << nazwisko << ", Wiek: " << wiek << " lat" << endl; } }; // Klasa Stanowisko class Stanowisko { private: string nazwaStanowiska; double wynagrodzenie; public: // Konstruktor argumentowy Stanowisko(string nazwa, double wyn) : nazwaStanowiska(nazwa), wynagrodzenie(wyn) {} // Metoda do wyświetlania danych stanowiska void pokazStanowisko() { cout << "Stanowisko: " << nazwaStanowiska << ", Wynagrodzenie: " << wynagrodzenie << " PLN" << endl; } }; // Klasa dziedzicząca Pracownik class Pracownik : public Osoba { private: int idPracownika; Stanowisko stanowisko; // Kompozycja public: // Konstruktor Pracownik(string im, string naz, int w, int id, string nazwaStanowiska, double wyn) : Osoba(im, naz, w), idPracownika(id), stanowisko(nazwaStanowiska, wyn) {} // Metoda do wyświetlania pełnych danych pracownika void pokazDanePracownika() { cout << "Dane pracownika:" << endl; pokazDane(); // Wywołanie metody z klasy bazowej cout << "Pracownik ID: " << idPracownika << endl; stanowisko.pokazStanowisko(); // Wywołanie metody z klasy Stanowisko } // Destruktor ~Pracownik() { cout << "Usuwam pracownika " << Osoba::imie << " " << Osoba::nazwisko << " o ID " << idPracownika << endl; } }; int main() { // Tworzenie obiektu klasy Pracownik Pracownik pracownik("Jan", "Golas", 40, 101, "Krawiec", 1000); // Wywołanie metody wyświetlającej pełne dane pracownika pracownik.pokazDanePracownika(); // Program kończy się, obiekt zostanie usunięty, a destruktory zostaną wywołane return 0; }