Récapitulatif : hiérarchie des employés
Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy. Leçon 55 sur 104.
Défi
FacileConstruisons un système complet de hiérarchie d'employés qui rassemble tous les concepts d'héritage que tu as appris dans ce chapitre. Tu vas créer une structure d'entreprise avec différents types d'employés qui partagent des attributs communs, mais qui possèdent des comportements spécialisés.
Tu vas organiser ton code sur quatre fichiers :
Employee.h: Définir la classeEmployeede base dont tous les types d'employés hériteront. Chaque employé possède un nom, un ID et un salaire de base. Inclure :- Des membres protégés pour le nom (
std::string), l'id (int) et baseSalary (double) - Un constructeur qui initialise les trois valeurs
- Une méthode virtuelle
displayInfo()qui affiche :Employee: <name> (ID: <id>) - Une méthode virtuelle
calculateSalary()qui renvoie le salaire de base - Un destructeur virtuel
- Des membres protégés pour le nom (
Manager.h: Définir une classeManagerqui hérite publiquement deEmployee. Les managers reçoivent un bonus basé sur la taille de leur équipe :- Un membre privé
int teamSize - Un constructeur qui accepte le nom, l'id, le salaire de base et la taille de l'équipe : chaîner correctement vers le constructeur de la classe de base
- Redéfinir
displayInfo()pour afficher :Manager: <name> (ID: <id>) - Team of <teamSize> - Redéfinir
calculateSalary()pour renvoyer le salaire de base plus 500 pour chaque membre de l'équipe
- Un membre privé
Developer.h: Définir une classeDeveloperqui hérite publiquement deEmployee. Les développeurs ont une langue de spécialité et reçoivent un bonus de compétence :- Un membre privé
std::string language - Un constructeur qui accepte le nom, l'id, le salaire de base et le langage de programmation
- Redéfinir
displayInfo()pour afficher :Developer: <name> (ID: <id>) - <language> - Redéfinir
calculateSalary()pour renvoyer le salaire de base plus un bonus de compétence de 1000
- Un membre privé
main.cpp: Lire six entrées (chacune sur une ligne distincte) :- Nom du Manager
- ID du Manager
- Salaire de base du Manager
- Nom du Developer
- ID du Developer
- Salaire de base du Developer
Créer un Manager avec une taille d'équipe de 4 et un Developer spécialisé en "C++". Stocker les pointeurs vers les deux dans un tableau de pointeurs
Employee*. Parcourir le tableau pour appelerdisplayInfo()et afficher le salaire calculé pour chaque employé dans ce format :<displayInfo output> Salary: $<calculated salary>Afficher une ligne vide entre les employés. Après avoir affiché tous les employés, supprimer correctement les objets alloués dynamiquement.
Par exemple, avec les entrées Sarah, 101, 5000, Mike, 102 et 4500 :
Manager: Sarah (ID: 101) - Team of 4
Salary: $7000
Developer: Mike (ID: 102) - C++
Salary: $5500Ce défi montre le polymorphisme en action : appeler des méthodes virtuelles via des pointeurs vers la classe de base invoque les implémentations correctes des classes dérivées. N'oublie pas d'utiliser le mot-clé override et d'inclure un destructeur virtuel dans ta classe de base pour un nettoyage correct.
Essayez vous-même
#include <iostream>
#include <string>
#include "Employee.h"
#include "Manager.h"
#include "Developer.h"
using namespace std;
int main() {
// Lire les entrées du Manager
string managerName;
int managerId;
double managerSalary;
getline(cin, managerName);
cin >> managerId;
cin >> managerSalary;
cin.ignore();
// Lire les entrées du Developer
string developerName;
int developerId;
double developerSalary;
getline(cin, developerName);
cin >> developerId;
cin >> developerSalary;
// TODO: Créer un Manager avec une taille d'équipe de 4
// TODO: Créer un Developer qui se spécialise en "C++"
// TODO: Créer un tableau de pointeurs Employee* pour stocker les deux employés
// TODO: Parcourir le tableau et pour chaque employé :
// - Appeler displayInfo()
// - Afficher : Salary: $<salaire calculé>
// - Afficher une ligne vide entre les employés (pas après le dernier)
// TODO: Supprimer les objets alloués dynamiquement
return 0;
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesGénération et compilation en C++Fichiers d’en-tête et fichiers sourceEspaces de noms et portéeIntroduction à la POO en C++Classes et objetsLe pointeur « this »Méthodes (fonctions membres)Attributs (membres de données)Bases des constructeurs et destructeursRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d’instance et statiquesAccesseurs et mutateursFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d’accès de l’héritageOrdre d’appel des constructeurs et destructeursRedéfinition des méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif : hiérarchie des employés10Vue d’ensemble de la STL
Vue d’ensemble et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - fréquence des mots13Modèles de conception, partie 1
Introduction aux modèles de conceptionModèle SingletonFabrique et fabrique abstraiteModèle BuilderModèle ObserverModèle Strategy2Gestion de la mémoire
Mémoire de pile ou de tasPointeurs et référencesMémoire dynamique (new/delete)Pointeurs intelligents en C++RAII en C++Récapitulatif - Gestionnaire de tableaux dynamiques5Encapsulation
Spécificateurs d’accès en C++Spécificateurs d’accès en profondeurMasquage de l’informationStruct vs classeClasses imbriquées et internesRécapitulatif - Système de gestion des dossiers étudiants8Polymorphisme
Polymorphisme à la compilation vs à l’exécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d’interfaces en C++Conversion dynamique et RTTIRécapitulatif - Calculateur de formes3Constructeurs et destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d’initialisation des constructeursConstructeurs déléguésApprofondissement des destructeursRègle des trois / cinq / zéroRécapitulatif - Classe String6Surcharge des opérateurs
Introduction à la surcharge des opérateursSurcharge des opérateurs arithmétiquesSurcharge des opérateurs de comparaisonOpérateurs de fluxSurcharge de l’opérateur d’affectationSurcharge des opérateurs [] et ()Opérateurs de conversion de typeRécapitulatif – Classe Matrix9Templates
Templates de fonctionsTemplates de classesSpécialisation des templatesTemplates variadiquesBases de SFINAE et des traits de typesRécapitulatif - Conteneur génériqueEntraînez-vous par vous-même : Compilateur C++ en ligne