Recapitulação - Hierarquia de Funcionários
Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 55 de 104.
Desafio
FácilVamos construir um sistema completo de hierarquia de funcionários que reúne todos os conceitos de herança que você aprendeu neste capítulo. Você criará uma estrutura de empresa com diferentes tipos de funcionários que compartilham atributos comuns, mas possuem comportamentos especializados.
Você organizará seu código em quatro arquivos:
Employee.h: Defina a classe baseEmployeeda qual todos os tipos de funcionários herdarão. Todo funcionário tem um nome, um ID e um salário base. Inclua:- Membros protegidos para name (
std::string), id (int) e baseSalary (double) - Um construtor que inicializa todos os três valores
- Um método virtual
displayInfo()que imprime:Employee: <name> (ID: <id>) - Um método virtual
calculateSalary()que retorna o salário base - Um destrutor virtual
- Membros protegidos para name (
Manager.h: Defina uma classeManagerque herda publicamente deEmployee. Os gerentes recebem um bônus baseado no tamanho da sua equipe:- Um membro privado
int teamSize - Um construtor que recebe name, id, base salary e team size — encadeie para o construtor base apropriadamente
- Sobrescreva
displayInfo()para imprimir:Manager: <name> (ID: <id>) - Team of <teamSize> - Sobrescreva
calculateSalary()para retornar o salário base mais 500 para cada membro da equipe
- Um membro privado
Developer.h: Defina uma classeDeveloperque herda publicamente deEmployee. Os desenvolvedores têm uma linguagem de especialidade e recebem um bônus de habilidade:- Um membro privado
std::string language - Um construtor que recebe name, id, base salary e programming language
- Sobrescreva
displayInfo()para imprimir:Developer: <name> (ID: <id>) - <language> - Sobrescreva
calculateSalary()para retornar o salário base mais um bônus de habilidade de 1000
- Um membro privado
main.cpp: Leia seis entradas (cada uma em uma linha separada):- Nome do gerente
- ID do gerente
- Salário base do gerente
- Nome do desenvolvedor
- ID do desenvolvedor
- Salário base do desenvolvedor
Crie um Manager com tamanho de equipe 4 e um Developer que se especializa em "C++". Armazene ponteiros para ambos em um array de ponteiros
Employee*. Percorra o array para chamardisplayInfo()e imprimir o salário calculado para cada funcionário neste formato:<displayInfo output> Salary: <displayInfo output> Salary: $<calculated salary>lt;calculated salary>Imprima uma linha em branco entre os funcionários. Após exibir todos os funcionários, delete adequadamente os objetos alocados dinamicamente.
Por exemplo, com as entradas Sarah, 101, 5000, Mike, 102 e 4500:
Manager: Sarah (ID: 101) - Team of 4
Salary: $7000
Developer: Mike (ID: 102) - C++
Salary: $5500Este desafio demonstra o polimorfismo em ação — chamar métodos virtuais através de ponteiros da classe base invoca as implementações corretas das classes derivadas. Lembre-se de usar a palavra-chave override e incluir um destrutor virtual em sua classe base para uma limpeza adequada.
Experimente você mesmo
#include <iostream>
#include <string>
#include "Employee.h"
#include "Manager.h"
#include "Developer.h"
using namespace std;
int main() {
// Ler as entradas do Manager
string managerName;
int managerId;
double managerSalary;
getline(cin, managerName);
cin >> managerId;
cin >> managerSalary;
cin.ignore();
// Ler as entradas do Developer
string developerName;
int developerId;
double developerSalary;
getline(cin, developerName);
cin >> developerId;
cin >> developerSalary;
// TODO: Criar um Manager com tamanho de equipe 4
// TODO: Criar um Developer que se especializa em "C++"
// TODO: Criar um array de ponteiros Employee* para armazenar ambos os funcionários
// TODO: Percorrer o array e para cada funcionário:
// - Chamar displayInfo()
// - Imprimir: Salary: $<calculated salary>
// - Imprimir uma linha em branco entre os funcionários (não após o último)
// TODO: Deletar os objetos alocados dinamicamente
return 0;
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de OOP
Arquivos ExternosBuild e Compilação em C++Arquivos Header e SourceNamespaces e EscopoIntrodução a OOP em C++Classes vs ObjetosO Ponteiro 'this'Métodos (Funções Membro)Atributos (Membros de Dados)Básico de Ctors e DtorsRecapitulação - Calculadora Simples4Propriedades de Classe
Membros de Instância vs EstáticosGetters e SettersFunções de Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRecapitulação - Gerenciador de Conta Bancária7Herança
Herança BásicaNíveis de Acesso na HerançaOrdem de Chamada de Ctor e DtorSobrescrita de MétodosFunções Virtuais e VTableHerança MúltiplaHerança VirtualRecapitulação - Hierarquia de Funcionários2Gerenciamento de Memória
Memória Stack vs HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Smart Pointers em C++RAII em C++Recapitulação - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de Acesso em C++Especificadores de Acesso em DetalhesOcultação de InformaçãoStruct vs ClassClasses Aninhadas e InternasRecapitulação - Sistema de Registros de Alunos8Polimorfismo
Polimorfismo de Compilação vs Tempo de ExecuçãoSobrecarga de FunçõesFunções Virtuais RevisitadasFunções Virtuais PurasClasses AbstratasDesign de Interfaces em C++Dynamic Casting e RTTIRecapitulação - Calculadora de Formas3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentaçãoListas de Inicialização do ConstrutorConstrutores DelegadosMergulho Profundo em DestrutoresRegra dos Três / Cinco / ZeroRecapitulação - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de StreamSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçãoTemplates de ClasseEspecialização de TemplatesTemplates VariádicosFundamentos de SFINAE e Type TraitsRecapitulação - Container Genérico