Menu
Coddy logo textTech

Rückblick - Mitarbeiter-Hierarchie

Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 55 von 104.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein vollständiges Mitarbeiter-Hierarchiesystem aufbauen, das alle Vererbungskonzepte zusammenführt, die Sie in diesem Kapitel gelernt haben. Sie werden eine Unternehmensstruktur mit verschiedenen Mitarbeitertypen erstellen, die gemeinsame Attribute teilen, aber spezialisierte Verhaltensweisen aufweisen.

Sie werden Ihren Code über vier Dateien organisieren:

  • Employee.h: Definieren Sie die Basisklasse Employee, von der alle Mitarbeitertypen erben werden. Jeder Mitarbeiter hat einen Namen, eine ID und ein Grundgehalt. Enthalten sein müssen:
    • Geschützte (protected) Member für den Namen (std::string), die ID (int) und das Grundgehalt (double)
    • Ein Konstruktor, der alle drei Werte initialisiert
    • Eine virtuelle displayInfo() Methode, die Folgendes ausgibt: Employee: <name> (ID: <id>)
    • Eine virtuelle calculateSalary() Methode, die das Grundgehalt zurückgibt
    • Ein virtueller Destruktor
  • Manager.h: Definieren Sie eine Klasse Manager, die öffentlich von Employee erbt. Manager erhalten einen Bonus basierend auf ihrer Teamgröße:
    • Ein privates int teamSize Member
    • Ein Konstruktor, der Name, ID, Grundgehalt und Teamgröße entgegennimmt — verketten Sie diesen angemessen mit dem Basis-Konstruktor
    • Überschreiben Sie displayInfo(), um Folgendes auszugeben: Manager: <name> (ID: <id>) - Team of <teamSize>
    • Überschreiben Sie calculateSalary(), um das Grundgehalt plus 500 für jedes Teammitglied zurückzugeben
  • Developer.h: Definieren Sie eine Klasse Developer, die öffentlich von Employee erbt. Entwickler haben eine spezialisierte Sprache und erhalten einen Qualifikationsbonus:
    • Ein privates std::string language Member
    • Ein Konstruktor, der Name, ID, Grundgehalt und Programmiersprache entgegennimmt
    • Überschreiben Sie displayInfo(), um Folgendes auszugeben: Developer: <name> (ID: <id>) - <language>
    • Überschreiben Sie calculateSalary(), um das Grundgehalt plus einen Qualifikationsbonus von 1000 zurückzugeben
  • main.cpp: Lesen Sie sechs Eingaben ein (jede in einer separaten Zeile):
    1. Name des Managers
    2. ID des Managers
    3. Grundgehalt des Managers
    4. Name des Entwicklers
    5. ID des Entwicklers
    6. Grundgehalt des Entwicklers

    Erstellen Sie einen Manager mit einer Teamgröße von 4 und einen Entwickler, der sich auf "C++" spezialisiert hat. Speichern Sie Zeiger auf beide in einem Array von Employee* Zeigern. Durchlaufen Sie das Array in einer Schleife, um displayInfo() aufzurufen und das berechnete Gehalt für jeden Mitarbeiter in diesem Format auszugeben:

    <displayInfo output>
    Salary: <displayInfo output>
    Salary: $<calculated salary>lt;calculated salary>

    Geben Sie eine Leerzeile zwischen den Mitarbeitern aus. Nachdem alle Mitarbeiter angezeigt wurden, löschen Sie die dynamisch zugewiesenen Objekte ordnungsgemäß.

Zum Beispiel mit den Eingaben Sarah, 101, 5000, Mike, 102 und 4500:

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

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

Diese Herausforderung demonstriert Polymorphismus in Aktion — der Aufruf virtueller Methoden über Basisklassen-Zeiger ruft die korrekten Implementierungen der abgeleiteten Klassen auf. Denken Sie daran, das Schlüsselwort override zu verwenden und einen virtuellen Destruktor in Ihrer Basisklasse für eine ordnungsgemäße Bereinigung einzufügen.

Probier es selbst

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

using namespace std;

int main() {
    // Eingaben für Manager lesen
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // Eingaben für Developer lesen
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO: Erstelle einen Manager mit einer Teamgröße von 4
    // TODO: Erstelle einen Developer, der sich auf "C++" spezialisiert
    
    // TODO: Erstelle ein Array von Employee* Pointern, um beide Mitarbeiter zu speichern
    
    // TODO: Iteriere durch das Array und für jeden Mitarbeiter:
    //   - Rufe displayInfo() auf
    //   - Gib aus: Salary: $<calculated salary>
    //   - Gib eine Leerzeile zwischen den Mitarbeitern aus (nicht nach dem letzten)
    
    // TODO: Lösche die dynamisch allozierten Objekte
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung