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

Construyamos 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 empresarial 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 que 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), el id (int) y baseSalary (double)
    • Un constructor que inicialice los tres valores
    • Un método virtual displayInfo() que imprima: Employee: <name> (ID: <id>)
    • Un método virtual calculateSalary() que devuelva el salario base
    • Un destructor virtual
  • Manager.h: Define una clase Manager que herede públicamente de Employee. Los managers reciben un bono basado en el tamaño de su equipo:
    • Un miembro privado int teamSize
    • Un constructor que reciba el nombre, el id, el salario base y el tamaño del equipo: encadena correctamente con el constructor de la clase base
    • 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 herede públicamente de Employee. Los desarrolladores tienen un lenguaje de especialidad y reciben un bono por habilidades:
    • Un miembro privado std::string language
    • Un constructor que reciba el nombre, el id, el salario base y el 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 habilidades 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 desarrollador
    5. ID del desarrollador
    6. Salario base del desarrollador

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

    <displayInfo output>
    Salary: $<calculated salary>

    Imprime una línea en blanco entre los 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 mediante punteros de la clase base invoca las implementaciones correctas de las clases derivadas. 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 entradas del Manager
    string managerName;
    int managerId;
    double managerSalary;
    
    getline(cin, managerName);
    cin >> managerId;
    cin >> managerSalary;
    cin.ignore();
    
    // Leer entradas del Developer
    string developerName;
    int developerId;
    double developerSalary;
    
    getline(cin, developerName);
    cin >> developerId;
    cin >> developerSalary;
    
    // TODO: Crear un Manager con tamaño de equipo 4
    // TODO: Crear un Developer que se especializa en "C++"
    
    // TODO: Crear un array de punteros Employee* para almacenar ambos empleados
    
    // TODO: Recorrer el array y para cada empleado:
    //   - Llamar a displayInfo()
    //   - Imprimir: Salary: $<salario calculado>
    //   - 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

Practica por tu cuenta: Compilador de C++ online