Menu
Coddy logo textTech

Rückblick – Mitarbeiterhierarchie

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

challenge icon

Aufgabe

Einfach

Erstellen wir ein vollständiges System für eine Mitarbeiterhierarchie, das alle Vererbungskonzepte zusammenführt, die du in diesem Kapitel gelernt hast. Du erstellst eine Unternehmensstruktur mit verschiedenen Mitarbeitertypen, die gemeinsame Attribute haben, sich aber durch spezialisierte Verhaltensweisen unterscheiden.

Du organisierst deinen Code auf vier Dateien verteilt:

  • Employee.h: Definiere die Employee-Klasse als base Employee-Klasse, von der alle Mitarbeitertypen erben werden. Jeder Mitarbeiter hat einen Namen, eine ID und ein base-Gehalt. Füge Folgendes ein:
    • Geschützte Member für name (std::string), id (int) und baseSalary (double)
    • Einen Konstruktor, der alle drei Werte initialisiert
    • Eine virtuelle displayInfo()-Methode, die Folgendes ausgibt: Employee: <name> (ID: <id>)
    • Eine virtuelle calculateSalary()-Methode, die das base-Gehalt zurückgibt
    • Einen virtuellen Destruktor
  • Manager.h: Definiere eine Manager-Klasse, die öffentlich von Employee erbt. Manager erhalten einen Bonus basierend auf ihrer Teamgröße:
    • Ein privates int teamSize-Member
    • Einen Konstruktor, der name, id, base-Gehalt und teamSize übernimmt: Rufe den base-Konstruktor entsprechend auf
    • Überschreibe displayInfo(), sodass Folgendes ausgegeben wird: Manager: <name> (ID: <id>) - Team of <teamSize>
    • Überschreibe calculateSalary(), sodass das base-Gehalt plus 500 für jedes Teammitglied zurückgegeben wird
  • Developer.h: Definiere eine Developer-Klasse, die öffentlich von Employee erbt. Developer haben eine Spezialsprache und erhalten einen Kompetenzbonus:
    • Ein privates std::string language-Member
    • Einen Konstruktor, der name, id, base-Gehalt und Programmiersprache übernimmt
    • Überschreibe displayInfo(), sodass Folgendes ausgegeben wird: Developer: <name> (ID: <id>) - <language>
    • Überschreibe calculateSalary(), sodass das base-Gehalt plus ein Kompetenzbonus von 1000 zurückgegeben wird
  • main.cpp: Lies sechs Eingaben ein (jeweils in einer eigenen Zeile):
    1. Managername
    2. Manager-ID
    3. Manager-base-Gehalt
    4. Developername
    5. Developer-ID
    6. Developer-base-Gehalt

    Erstelle einen Manager mit der Teamgröße 4 und einen Developer, der sich auf "C++" spezialisiert. Speichere Zeiger auf beide in einem Array aus Employee*-Zeigern. Durchlaufe das Array, um für jeden Mitarbeiter displayInfo() aufzurufen und das berechnete Gehalt in diesem Format auszugeben:

    <displayInfo output>
    Salary: $<calculated salary>

    Gib zwischen den Mitarbeitern eine leere Zeile aus. Lösche nach der Anzeige aller Mitarbeiter die dynamisch reservierten Objekte ordnungsgemäß.

Beispielsweise 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 Aufgabe demonstriert Polymorphie in der Praxis: Das Aufrufen virtueller Methoden über Zeiger auf die base class ruft die korrekten Implementierungen der abgeleiteten Klassen auf. Denke daran, das Schlüsselwort override zu verwenden und einen virtuellen Destruktor in deiner base class einzuschließen, damit die Bereinigung ordnungsgemäß erfolgt.

Probier es selbst

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

using namespace std;

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

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C++-Compiler