Revisã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 criar 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 têm 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 nome (
std::string), id (int) e baseSalary (double) - Um construtor que inicializa 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 nome (
Manager.h: Defina uma classeManagerque herda publicamente deEmployee. Gerentes recebem um bônus com base no tamanho de sua equipe:- Um membro privado
int teamSize - Um construtor que recebe nome, id, salário-base e tamanho da equipe: encadeie-o adequadamente ao construtor da classe base
- Substitua
displayInfo()para imprimir:Manager: <name> (ID: <id>) - Team of <teamSize> - Substitua
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. Desenvolvedores têm uma linguagem de especialidade e recebem um bônus por habilidade:- Um membro privado
std::string language - Um construtor que recebe nome, id, salário-base e linguagem de programação
- Substitua
displayInfo()para imprimir:Developer: <name> (ID: <id>) - <language> - Substitua
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 especializado em "C++". Armazene ponteiros para ambos em um array de ponteiros
Employee*. Percorra o array para chamardisplayInfo()e imprimir o salário calculado de cada funcionário neste formato:<displayInfo output> Salary: $<calculated salary>Imprima uma linha em branco entre os funcionários. Depois de exibir todos os funcionários, exclua corretamente 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 por meio 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 entradas do Manager
string managerName;
int managerId;
double managerSalary;
getline(cin, managerName);
cin >> managerId;
cin >> managerSalary;
cin.ignore();
// Ler entradas do Developer
string developerName;
int developerId;
double developerSalary;
getline(cin, developerName);
cin >> developerId;
cin >> developerSalary;
// TODO: Crie um Manager com tamanho de equipe 4
// TODO: Crie um Developer que se especializa em "C++"
// TODO: Crie um array de ponteiros Employee* para armazenar ambos os employees
// TODO: Percorra o array e para cada employee:
// - Chame displayInfo()
// - Imprima: Salary: $<salário calculado>
// - Imprima uma linha em branco entre os employees (não após o último)
// TODO: Delete os objetos alocados dinamicamente
return 0;
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos externosBuild e compilação em C++Arquivos de cabeçalho e arquivos-fonteNamespaces e escopoIntrodução à POO em C++Classes vs. objetosO ponteiro 'this'Métodos (funções membro)Atributos (membros de dados)Noções básicas de construtores e destruidoresRevisão - calculadora simples4Propriedades de Classe
Membros de Instância vs. EstáticosGetters e SettersFunções Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRevisão - Gerenciador de Contas Bancárias7Herança
Herança básicaNíveis de acesso da herançaOrdem de chamada de construtor e destrutorSobrescrita de métodosFunções virtuais e VTableHerança múltiplaHerança virtualRevisão - Hierarquia de funcionários10Visão geral da STL
Visão geral e filosofia da STLContêineres da STLIteradoresAlgoritmos da STLFunctors e expressões lambdaRecapitulação - Frequência de palavras13Padrões de Projeto — Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonFactory e Abstract FactoryPadrão BuilderPadrão ObserverPadrão Strategy2Gerenciamento de Memória
Memória Stack vs. HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Ponteiros Inteligentes em C++RAII em C++Revisão - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de acesso em C++Especificadores de acesso em profundidadeOcultação de informaçõesStruct vs ClasseClasses aninhadas e internasRecapitulação - Sistema de registros de alunos8Polimorfismo
Polimorfismo em compilação vs. execuçãoSobrecarga de funçõesFunções virtuais revisadasFunções virtuais purasClasses abstratasDesign de interfaces em C++Conversão dinâmica e RTTIRecapitulação — Calculadora de formas11Conceitos Avançados de OOP
Composição vs. HerançaMixins via CRTPIdioma PimplApagamento de TiposClasses Enum e Tipagem ForteTratamento de Exceções em OOPHierarquias de Exceções Personalizadas14Padrões de Projeto — Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositeRAII como Padrão3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentoListas de Inicialização do ConstrutorConstrutores DelegantesAprofundamento em DestrutoresRegra dos Três / Cinco / ZeroRevisão - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de FluxoSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçõesTemplates de ClassesEspecialização de TemplatesTemplates VariádicosNoções Básicas de SFINAE e Traits de TiposRecapitulação - Contêiner GenéricoPratique por conta própria: Compilador de C++ online