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.
Desafío
FácilConstruyamos 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 baseEmployeede 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
- Miembros protegidos para el nombre (
Manager.h: Define una claseManagerque herede públicamente deEmployee. 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
- Un miembro privado
Developer.h: Define una claseDeveloperque herede públicamente deEmployee. 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
- Un miembro privado
main.cpp: Lee seis entradas (cada una en una línea separada):- Nombre del manager
- ID del manager
- Salario base del manager
- Nombre del desarrollador
- ID del desarrollador
- 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 adisplayInfo()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: $5500Este 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
1Fundamentos de OOP
Archivos externosConstrucción y compilación en C++Archivos de cabecera y archivos fuenteNamespaces y alcanceIntroducción a OOP en C++Clases vs ObjetosEl puntero 'this'Métodos (Funciones miembro)Atributos (Miembros de datos)Conceptos básicos de Ctors y DtorsResumen - Calculadora simple4Propiedades de clase
Miembros de instancia vs. estáticosGetters y SettersFunciones miembro constPalabra clave mutableMétodos y variables estáticosFunciones y clases amigasResumen - Gestor de cuentas bancarias7Herencia
Herencia básicaNiveles de acceso en la herenciaOrden de llamada de Ctor y DtorSobrescritura de métodosFunciones virtuales y VTableHerencia múltipleHerencia virtualResumen - Jerarquía de empleados2Gestión de memoria
Memoria Stack vs HeapPunteros y referenciasMemoria dinámica (new/delete)Punteros inteligentes en C++RAII en C++Resumen - Gestor de arrays dinámicos5Encapsulamiento
Especificadores de acceso en C++Especificadores de acceso en profundidadOcultamiento de informaciónStruct vs ClassClases anidadas e internasResumen - Sistema de registros de estudiantes8Polimorfismo
Polimorfismo: Compilación vs. Tiempo de ejecuciónSobrecarga de funcionesFunciones virtuales revisadasFunciones virtuales purasClases abstractasDiseño de interfaces en C++Dynamic Casting y RTTIResumen: Calculadora de figuras11Conceptos avanzados de POO
Composición vs. HerenciaMixins mediante CRTPIdioma PimplBorrado de tiposEnum Classes y tipado fuerteManejo de excepciones en POOJerarquías de excepciones personalizadas14Patrones de diseño - Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositeRAII como patrón3Constructores y Destructores
Constructor por defectoConstructor parametrizadoConstructor de copiaConstructor de movimientoListas de inicialización del constructorConstructores delegadosAnálisis profundo del destructorRegla de tres / cinco / ceroResumen - Clase String6Sobrecarga de operadores
Introducción a la sobrecarga de operadoresSobrecarga de operadores aritméticosSobrecarga de operadores de comparaciónOperadores de flujo (Stream)Sobrecarga del operador de asignaciónSobrecarga de los operadores [] y ()Operadores de conversión de tiposResumen - Clase Matrix9Plantillas
Plantillas de funcionesPlantillas de clasesEspecialización de plantillasPlantillas variádicasConceptos básicos de SFINAE y Type TraitsResumen - Contenedor genéricoPractica por tu cuenta: Compilador de C++ online