Menu
Coddy logo textTech

Powtórzenie — hierarchia pracowników

Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 55 z 104.

challenge icon

Wyzwanie

Łatwy

Zbudujmy kompletny system hierarchii pracowników, który łączy wszystkie pojęcia dziedziczenia poznane w tym rozdziale. Utworzysz strukturę firmy z różnymi typami pracowników, które mają wspólne atrybuty, ale wyspecjalizowane zachowania.

Rozmieścisz kod w czterech plikach:

  • Employee.h: Zdefiniuj bazową klasę Employee, po której będą dziedziczyć wszystkie typy pracowników. Każdy pracownik ma imię, identyfikator i wynagrodzenie podstawowe. Uwzględnij:
    • Chronione składowe dla imienia (std::string), id (int) i baseSalary (double)
    • Konstruktor inicjalizujący wszystkie trzy wartości
    • Wirtualną metodę displayInfo(), która wypisuje: Employee: <name> (ID: <id>)
    • Wirtualną metodę calculateSalary(), która zwraca wynagrodzenie podstawowe
    • Wirtualny destruktor
  • Manager.h: Zdefiniuj klasę Manager, która publicznie dziedziczy po Employee. Kierownicy otrzymują premię zależną od liczebności swojego zespołu:
    • Prywatny element członkowski int teamSize
    • Konstruktor przyjmujący imię, id, wynagrodzenie podstawowe i liczebność zespołu: odpowiednio wywołaj konstruktor klasy bazowej
    • Nadpisz displayInfo(), aby wypisywała: Manager: <name> (ID: <id>) - Team of <teamSize>
    • Nadpisz calculateSalary(), aby zwracała wynagrodzenie podstawowe powiększone o 500 za każdego członka zespołu
  • Developer.h: Zdefiniuj klasę Developer, która publicznie dziedziczy po Employee. Programiści mają język specjalizacji i otrzymują premię za umiejętności:
    • Prywatny element członkowski std::string language
    • Konstruktor przyjmujący imię, id, wynagrodzenie podstawowe i język programowania
    • Nadpisz displayInfo(), aby wypisywała: Developer: <name> (ID: <id>) - <language>
    • Nadpisz calculateSalary(), aby zwracała wynagrodzenie podstawowe powiększone o premię za umiejętności w wysokości 1000
  • main.cpp: Odczytaj sześć danych wejściowych (każdą w osobnym wierszu):
    1. Imię kierownika
    2. Id kierownika
    3. Wynagrodzenie podstawowe kierownika
    4. Imię programisty
    5. Id programisty
    6. Wynagrodzenie podstawowe programisty

    Utwórz obiekt Manager z liczebnością zespołu równą 4 oraz obiekt Developer specjalizujący się w "C++". Zapisz wskaźniki do obu obiektów w tablicy wskaźników typu Employee*. Przejdź przez tablicę, wywołaj displayInfo() i wypisz obliczone wynagrodzenie każdego pracownika w tym formacie:

    <displayInfo output>
    Salary: $<calculated salary>

    Wypisz pusty wiersz między pracownikami. Po wyświetleniu wszystkich pracowników poprawnie usuń dynamicznie zaalokowane obiekty.

Na przykład dla danych wejściowych Sarah, 101, 5000, Mike, 102 i 4500:

Manager: Sarah (ID: 101) - Team of 4
Salary: $7000

Developer: Mike (ID: 102) - C++
Salary: $5500

To wyzwanie pokazuje polimorfizm w praktyce: wywołanie metod wirtualnych za pośrednictwem wskaźników do klasy bazowej uruchamia odpowiednie implementacje klas pochodnych. Pamiętaj, aby użyć słowa kluczowego override i dodać wirtualny destruktor do klasy bazowej, aby zapewnić poprawne sprzątanie.

Spróbuj swoich sił

#include <iostream>
#include <string>
#include "Employee.h"
#include "Manager.h"
#include "Developer.h"

using namespace std;

int main() {
    // Wczytaj dane Manager
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // Wczytaj dane Developer
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO: Utwórz obiekt Manager z zespołem liczącym 4 osoby
    // TODO: Utwórz obiekt Developer specjalizujący się w "C++"
    
    // TODO: Utwórz tablicę wskaźników Employee*, aby przechować obu pracowników
    
    // TODO: Przejdź przez tablicę i dla każdego pracownika:
    //   - Wywołaj displayInfo()
    //   - Wypisz: Salary: $&lt;calculated salary&gt;
    //   - Wypisz pusty wiersz między pracownikami (ale nie po ostatnim)
    
    // TODO: Usuń obiekty utworzone dynamicznie
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C++ online