Menu
Coddy logo textTech

Resumen - Jerarquía de empleados

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 55 de 104.

challenge icon

Desafío

Fácil

Vamos a construir un sistema completo de jerarquía de empleados que reúna todos los conceptos de herencia que has aprendido en este capítulo. Crearás una estructura de empresa con diferentes tipos de empleados que comparten atributos comunes pero tienen comportamientos especializados.

Organizarás tu código en cuatro archivos:

  • Employee.h: Define la clase base Employee de la cual heredarán todos los tipos de empleados. Cada empleado tiene un nombre, un ID y un salario base. Incluye:
    • Miembros protegidos para el nombre (std::string), id (int) y baseSalary (double)
    • Un constructor que inicializa los tres valores
    • Un método virtual displayInfo() que imprime: Employee: <name> (ID: <id>)
    • Un método virtual calculateSalary() que devuelve el salario base
    • Un destructor virtual
  • Manager.h: Define una clase Manager que hereda públicamente de Employee. Los gerentes reciben un bono basado en el tamaño de su equipo:
    • Un miembro privado int teamSize
    • Un constructor que recibe el nombre, id, salario base y tamaño del equipo — encadenado al constructor base de forma apropiada
    • Sobrescribe displayInfo() para imprimir: Manager: <name> (ID: <id>) - Team of <teamSize>
    • Sobrescribe calculateSalary() para devolver el salario base más 500 por cada miembro del equipo
  • Developer.h: Define una clase Developer que hereda públicamente de Employee. Los desarrolladores tienen un lenguaje de especialidad y obtienen un bono por habilidad:
    • Un miembro privado std::string language
    • Un constructor que recibe el nombre, id, salario base y lenguaje de programación
    • Sobrescribe displayInfo() para imprimir: Developer: <name> (ID: <id>) - <language>
    • Sobrescribe calculateSalary() para devolver el salario base más un bono por habilidad de 1000
  • main.cpp: Lee seis entradas (cada una en una línea separada):
    1. Nombre del Manager
    2. ID del Manager
    3. Salario base del Manager
    4. Nombre del Developer
    5. ID del Developer
    6. Salario base del Developer

    Crea un Manager con un tamaño de equipo de 4 y un Developer que se especialice en "C++". Almacena punteros a ambos en un arreglo de punteros Employee*. Recorre el arreglo para llamar a displayInfo() e imprimir el salario calculado para cada empleado en este formato:

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

    Imprime una línea en blanco entre empleados. Después de mostrar todos los empleados, elimina correctamente los objetos asignados dinámicamente.

Por ejemplo, con las entradas Sarah, 101, 5000, Mike, 102 y 4500:

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

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

Este desafío demuestra el polimorfismo en acción: llamar a métodos virtuales a través de punteros de la clase base invoca las implementaciones correctas de la clase derivada. Recuerda usar la palabra clave override e incluir un destructor virtual en tu clase base para una limpieza adecuada.

Pruébalo tú mismo

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

using namespace std;

int main() {
    // Leer las entradas del Manager
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // Leer las entradas del Developer
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO: Crear un Manager con un tamaño de equipo de 4
    // TODO: Crear un Developer que se especialice en "C++"
    
    // TODO: Crear un arreglo de punteros Employee* para almacenar a ambos empleados
    
    // TODO: Recorrer el arreglo y para cada empleado:
    //   - Llamar a displayInfo()
    //   - Imprimir: Salary: $<calculated salary>
    //   - Imprimir una línea en blanco entre empleados (no después del último)
    
    // TODO: Eliminar los objetos asignados dinámicamente
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos