Powtórzenie — hierarchia pracowników
Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 55 z 104.
Wyzwanie
ŁatwyZbudujmy 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
- Chronione składowe dla imienia (
Manager.h: Zdefiniuj klasęManager, która publicznie dziedziczy poEmployee. 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
- Prywatny element członkowski
Developer.h: Zdefiniuj klasęDeveloper, która publicznie dziedziczy poEmployee. 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
- Prywatny element członkowski
main.cpp: Odczytaj sześć danych wejściowych (każdą w osobnym wierszu):- Imię kierownika
- Id kierownika
- Wynagrodzenie podstawowe kierownika
- Imię programisty
- Id programisty
- 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łajdisplayInfo()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: $5500To 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: $<calculated salary>
// - Wypisz pusty wiersz między pracownikami (ale nie po ostatnim)
// TODO: Usuń obiekty utworzone dynamicznie
return 0;
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneBudowanie i kompilacja C++Pliki nagłówkowe i pliki źródłowePrzestrzenie nazw i zakresWprowadzenie do programowania obiektowego w C++Klasy a obiektyWskaźnik „this”Metody (funkcje składowe)Atrybuty (składowe danych)Podstawy konstruktorów i destruktorówPowtórzenie – prosty kalkulator4Właściwości klas
Elementy instancji a elementy statyczneGettery i setteryStałe funkcje składoweSłowo kluczowe mutableMetody i zmienne statyczneFunkcje i klasy zaprzyjaźnionePodsumowanie – menedżer konta bankowego7Dziedziczenie
Podstawy dziedziczeniaPoziomy dostępu w dziedziczeniuKolejność wywołań konstruktora i destruktoraNadpisywanie metodFunkcje wirtualne i VTableWielokrotne dziedziczenieDziedziczenie wirtualnePowtórzenie — hierarchia pracowników2Zarządzanie pamięcią
Pamięć stosu a stertyWskaźniki i referencjePamięć dynamiczna (new/delete)Inteligentne wskaźniki w C++RAII w C++Podsumowanie — menedżer tablicy dynamicznej5Hermetyzacja
Specyfikatory dostępu w C++Specyfikatory dostępu — szczegółowoUkrywanie informacjiStruktura a klasaKlasy zagnieżdżone i wewnętrznePodsumowanie — system ewidencji studentów8Polimorfizm
Polimorfizm czasu kompilacji i wykonaniaPrzeciążanie funkcjiFunkcje wirtualne — powtórkaCzysto wirtualne funkcjeKlasy abstrakcyjneProjektowanie interfejsów w C++Rzutowanie dynamiczne i RTTIPodsumowanie — kalkulator kształtów3Konstruktory i destruktory
Konstruktor domyślnyKonstruktor z parametramiKonstruktor kopiującyKonstruktor przenoszącyListy inicjalizacyjne konstruktoraKonstruktory delegująceDestruktor — szczegółowe omówienieZasada trzech / pięciu / zeraPodsumowanie — klasa String6Przeciążanie operatorów
Wprowadzenie do przeciążania operatorówPrzeciążanie operatorów arytmetycznychPrzeciążanie operatorów porównaniaOperatory strumieniowePrzeciążanie operatora przypisaniaPrzeciążanie operatorów [] i ()Operatory konwersji typówPodsumowanie — klasa Matrix9Szablony
Szablony funkcjiSzablony klasSpecjalizacja szablonówSzablony wariadycznePodstawy SFINAE i cech typówPodsumowanie — kontener generycznyPoćwicz samodzielnie: Kompilator C++ online