// POO1.cpp (un peu plus que la derniere question du modele d'intra) // Expliquee une semaine avant l'intra #include #include using namespace std; class Personne { private: int age; char sexe; double taille ; double enMetre(int pieds, int pouces) { const double PIED_EN_METRE = 0.3048; // 1 pied = 0.3048 metre = 12 pouces return (pieds+pouces/12.0) * PIED_EN_METRE; } public : Personne(int a, char s, double t) // définition complétée { age = a; sexe = s; taille = t; } Personne(int, char, int, int); // définition reportée Personne(const Personne &); // constructeur par copie void afficher(string mess); // définition reportée int getAge(); // définition reportée void setAge(int nouvAge) // définition complétée { age = nouvAge; } } ; Personne::Personne(int a, char s, int pieds, int pouces) { age = a; sexe = s; taille = enMetre(pieds, pouces); } // constructeur par copie Personne::Personne(const Personne & autre) { cout << "On appelle du constructeur par copie\n"; age = autre.age; sexe = autre.sexe; taille = autre.taille; } int Personne::getAge() { return age; } void Personne::afficher(string mess) { if (mess.length()> 0) { cout << mess << " :\n"; cout << "Sexe : " << (sexe == 'F' ? "feminin":"masculin") << endl ; cout << "Age : " << age << " an(s)\n"; cout << "Taille : " << taille << " metre\n\n"; } else cout << setw(3) << sexe << setw(6) << age << setw(10) << setprecision(2) << taille << endl ; } void afficher(Personne pers[], int nbPers) { cout << "Tableau des personnes :\n" ; for(int i = 0; i < nbPers; i++) pers[i].afficher(""); cout << endl ; } void demo1() { cout << "Demo 1 :\n"; Personne pers1(25,'F', 1.72); pers1.afficher("Coordonnees de pers1"); Personne pers2(18, 'M', 5, 9); pers2.afficher("Infos de Patrice Jean"); Personne pers3 = Personne(32,'F',1.63); pers3.afficher("Mlle Lachance Julie"); Personne pers4 = pers1; pers4.afficher("Infos de pers4 qui est une copie de pers1"); Personne pers5(pers2); pers5.afficher("Infos de pers5 qui est une copie de pers2"); Personne * ptr = &pers2; ptr->afficher("Infos de la personne pointee par ptr"); cout << "ptr : " << (int) ptr << " et &pers2 " << (int) &pers2 << endl; Personne * ptr2 = new Personne(30,'M', 1.68); cout << "ptr2: " << (int) ptr2 << endl; ptr2->setAge(ptr2->getAge()+5); ptr2->afficher("Infos de la pers. pointee par pt2"); cout << "\nFin de démo 1 :\n\n"; } int main() { demo1(); cout.setf(ios::fixed); cout.setf(ios::showpoint); Personne pers[] = {Personne(30,'M', 1.68), Personne(25,'M', 1.72), Personne(45,'F', 5, 11) , Personne(32,'M', 6, 2)}; int nbPers = sizeof(pers) / sizeof(Personne); cout << nbPers << " personne(s) " << endl; afficher(pers, nbPers); return 0; } /* Exécution : Demo 1 : Coordonnees de pers1 : Sexe : feminin Age : 25 an(s) Taille : 1.72 metre Infos de Patrice Jean : Sexe : masculin Age : 18 an(s) Taille : 1.7526 metre Mlle Lachance Julie : Sexe : feminin Age : 32 an(s) Taille : 1.63 metre On appelle du constructeur par copie Infos de pers4 qui est une copie de pers1 : Sexe : feminin Age : 25 an(s) Taille : 1.72 metre On appelle du constructeur par copie Infos de pers5 qui est une copie de pers2 : Sexe : masculin Age : 18 an(s) Taille : 1.7526 metre Infos de la personne pointee par ptr : Sexe : masculin Age : 18 an(s) Taille : 1.7526 metre ptr : 2686432 et &pers2 2686432 ptr2: 3610432 Infos de la pers. pointee par pt2 : Sexe : masculin Age : 35 an(s) Taille : 1.68 metre Fin de dÚmo 1 : 4 personne(s) Tableau des personnes : M 30 1.68 M 25 1.72 F 45 1.80 M 32 1.88 -------------------------------- Process exited after 0.06031 seconds with return value 0 Appuyez sur une touche pour continuer...*/