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 vous avez appris dans ce chapitre. Vous allez créer une structure d'entreprise avec différents types d'employés qui partagent des attributs communs mais ont des comportements spécialisés.
Vous organiserez votre code sur quatre fichiers :
Employee.h: Définissez la classe de baseEmployeedont tous les types d'employés hériteront. Chaque employé a un nom, un identifiant (ID) et un salaire de base. Incluez :- Des membres protégés pour le nom (
std::string), l'id (int) et le baseSalary (double) - Un constructeur qui initialise ces trois valeurs
- Une méthode virtuelle
displayInfo()qui affiche :Employee: <name> (ID: <id>) - Une méthode virtuelle
calculateSalary()qui retourne le salaire de base - Un destructeur virtuel
- Des membres protégés pour le nom (
Manager.h: Définissez 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 prend le nom, l'id, le salaire de base et la taille de l'équipe — chaînez-le au constructeur de base de manière appropriée
- Surchargez
displayInfo()pour afficher :Manager: <name> (ID: <id>) - Team of <teamSize> - Surchargez
calculateSalary()pour retourner le salaire de base plus 500 pour chaque membre de l'équipe
- Un membre privé
Developer.h: Définissez une classeDeveloperqui hérite publiquement deEmployee. Les développeurs ont un langage de spécialité et reçoivent un bonus de compétence :- Un membre privé
std::string language - Un constructeur qui prend le nom, l'id, le salaire de base et le langage de programmation
- Surchargez
displayInfo()pour afficher :Developer: <name> (ID: <id>) - <language> - Surchargez
calculateSalary()pour retourner le salaire de base plus un bonus de compétence de 1000
- Un membre privé
main.cpp: Lisez six entrées (chacune sur une ligne séparée) :- Nom du manager
- ID du manager
- Salaire de base du manager
- Nom du développeur
- ID du développeur
- Salaire de base du développeur
Créez un Manager avec une taille d'équipe de 4 et un Developer spécialisé en "C++". Stockez les pointeurs vers les deux dans un tableau de pointeurs
Employee*. Parcourez le tableau pour appelerdisplayInfo()et affichez le salaire calculé pour chaque employé dans ce format :<displayInfo output> Salary: <displayInfo output> Salary: $<calculated salary>lt;calculated salary>Affichez une ligne vide entre les employés. Après avoir affiché tous les employés, supprimez 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 démontre le polymorphisme en action — l'appel de méthodes virtuelles via des pointeurs de classe de base invoque les implémentations correctes des classes dérivées. N'oubliez pas d'utiliser le mot-clé override et d'inclure un destructeur virtuel dans votre classe de base pour un nettoyage approprié.
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 pour Manager
string managerName;
int managerId;
double managerSalary;
getline(cin, managerName);
cin >> managerId;
cin >> managerSalary;
cin.ignore();
// Lire les entrées pour 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 spécialisé 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: $<calculated salary>
// - 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 externesBuild et Compilation C++Fichiers d'en-tête et Fichiers sourceEspaces de noms et PortéeIntroduction à la POO en C++Classes vs ObjetsLe pointeur 'this'Méthodes (Fonctions membres)Attributs (Membres de données)Bases des Ctors et DtorsRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d'instance vs membres statiquesGetters et SettersFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d'accès à l'héritageOrdre d'appel des Ctor et DtorRedéfinition de méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif - Hiérarchie des employés10Présentation de la STL
Présentation et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - Fréquence des mots13Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonFabrique & Fabrique abstraitePatron MonteurPatron ObservateurPatron Stratégie2Gestion de la mémoire
Mémoire Pile vs TasPointeurs et RéférencesMémoire dynamique (new/delete)Smart Pointers 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 d'informationStruct vs ClassClasses imbriquées et internesRécapitulatif - Système de gestion d'étudiants8Polymorphisme
Polymorphisme : Compilation vs ExécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d'interfaces en C++Dynamic Casting & RTTIRécapitulatif - Calculateur de formes11Concepts avancés de la POO
Composition vs HéritageMixins via CRTPIdiome PimplEffacement de typeEnum Classes & Typage fortGestion des exceptions en POOHiérarchies d'exceptions personnalisées14Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositeRAII en tant que patron3Constructeurs et Destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d'initialisation du constructeurConstructeurs déléguésAnalyse approfondie du destructeurRègle de trois / cinq / zéroRécapitulatif - Classe String6Surcharge d'opérateurs
Introduction à la surcharge d'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 de templatesTemplates variadiquesBases de SFINAE & Type TraitsRécapitulatif - Conteneur générique