/* Fichier Ex_Pers.cpp (un exemple d'introduction à la POO) Concevez la classe Personne comportant 1. des champs privés sexe, age, taille ; 2. d'une fonction privée pour convertir en mètre une taille en nombre de pieds et de pouces en sachant que 1 pied = 0.3048 mètre et 1 pied = 12 pouces 3. de quelques constructeurs dont au moins un avec la définition reportée 4. de quelques méthodes jugées appropriées . . . 5. de déclarer et d'initialiser un tableau de quelques personnes selon votre imagination 6. d'afficher le contenu de ce tableau . . . etc ... */ #include #include #include using namespace std; class Personne { private : char sexe ; int age ; double taille; // on ne veut pas fournir cette méthode à l'usager => l'accès est privé double metre(int nbPieds, int nbPouces) { const double PIED_EN_METRE = 0.3048; // 1 pied = 0.3048 mètre = 12 pouces return (nbPieds + nbPouces / 12.0) * PIED_EN_METRE; } public : // modèle d'un constructeur dont la définition est complète dans la classe Personne (char s, double t, int a) { sexe = s ; taille = t; age = a; } // modèle d'un constructeur dont la définition est reportée Personne (char, int, int, int); // modèle d'une méthode dont la définition est complète dans la classe int plusAge (Personne autre) { if (age > autre.age) return age; else return autre.age; } // modèle d'une méthode dont la définition est reportée void afficher(string); // methode d'acces double getTaille() { return taille; } // methode de modification void setTaille(double nouvTaille) { taille = nouvTaille; } bool plusPetite(Personne autre) { return taille < autre.taille; } }; Personne::Personne(char s, int nbPieds, int nbPouces, int a) { sexe = s ; taille = metre(nbPieds, nbPouces) ; age = a; } void Personne::afficher(string message) { cout.setf(ios::fixed); cout.setf(ios::showpoint); cout << message << setw(5) << age << setw(7) << setprecision(2) << taille << setw(11)<< ( toupper(sexe) == 'F' ? "feminin" : "masculin") << endl ; } /* fin de la classe Personne */ void continuer() { cout << endl << endl << "Appuyez sur une lettre suivie de Entree " ; char lettre; cin >> lettre ; cout << endl << endl; } void afficher(Personne pers[], int nbPers, string mess = "au debut") { cout << "\nContenu du tableau des personnes " << mess << " :\n"; for (int i = 0 ; i < nbPers ; i++) pers[i].afficher(""); cout << endl; } int indMax(Personne pers[], int nbPers) { int indice = 0; for(int i = 1; i < nbPers; i++) if (pers[i].getTaille() > pers[indice].getTaille()) indice = i; return indice; } int indMin(Personne pers[], int nbPers) { int indice = 0; for(int i = 1; i < nbPers; i++) if (pers[i].plusPetite(pers[indice])) indice = i; return indice; } void autreDemo() { cout << "\nAutre demonstration : " << endl; // pointeur vers une personne Personne * ptr = new Personne('M', 1.66, 34); ptr->afficher("La personne pointee par ptr "); // tableau des personnes Personne pers[] = { Personne('F', 1.60, 23), Personne('M', 1.68, 20), Personne('M', 1.70, 29), Personne('F', 1.74, 18), Personne('F', 5, 4, 27), Personne('F', 1.59, 24) }; int nbPers = sizeof(pers) / sizeof(Personne); afficher(pers, nbPers); // la taille de la 1ère personne sera 3 cm de moins que la troisième pesonne pers[0].setTaille(pers[2].getTaille() - 0.03); afficher(pers, nbPers, "apres cette modification de taille"); int indMaxTaille = indMax(pers, nbPers); pers[indMaxTaille].afficher("Infos de la personne ayant la taille maximale"); int indMinTaille = indMin(pers, nbPers); pers[indMinTaille].afficher("Infos de la personne ayant la taille minimale"); } int main() { // une manière d'appeler un constructeur Personne p1 ('M', 1.72, 23); p1.afficher("Infos de Bernard Dupont"); Personne p2 ('F', 5, 4, 19); p2.afficher("Infos de Caroline Tremblay"); // une autre manière d'appeler un constructeur Personne p3 = Personne('M', 1.65, 29); p3.afficher("Infos de qui ? "); autreDemo(); continuer(); return 0; } /* Exécution Infos de Bernard Dupont 23 1.72 masculin Infos de Caroline Tremblay 19 1.63 feminin Infos de qui ? 29 1.65 masculin Autre demonstration : La personne pointee par ptr 34 1.66 masculin Contenu du tableau des personnes au debut : 23 1.60 feminin 20 1.68 masculin 29 1.70 masculin 18 1.74 feminin 27 1.63 feminin 24 1.59 feminin Contenu du tableau des personnes apres cette modification de taille : 23 1.67 feminin 20 1.68 masculin 29 1.70 masculin 18 1.74 feminin 27 1.63 feminin 24 1.59 feminin Infos de la personne ayant la taille maximale 18 1.74 feminin Infos de la personne ayant la taille minimale 24 1.59 feminin Appuyez sur une lettre suivie de Entree */