#include // pour entrée-sortie cin, cout #include // pour le formatage #include // pour la racine carrée : sqrt using namespace std; // librairie standard class Rectangle { private: double longueur, largeur ; public : Rectangle(double lo, double la) { cout << "Appel au construteur a 2 parametres\n"; longueur = lo ; largeur = la ; } Rectangle(double cote) { cout << "Appel au construteur a 1 parametre\n"; longueur = largeur = cote ; } Rectangle(const Rectangle& r) { cout << "Appel du constructeur de recopie\n" ; longueur = r.longueur; largeur = r.largeur; } Rectangle() { cout << "Appel au constructeur sans parametre\n"; cout << "Quelles sont les valeurs de longueur et de largeur ? "; cin >> longueur >> largeur; } void afficher(const string message); double perimetre() { return 2 * (longueur + largeur); } double surface() { return longueur * largeur ; } double diagonale() { return sqrt( longueur * longueur + largeur * largeur); } double getLongueur() { return longueur; } void setLongueur(double nouvLongueur) { longueur = nouvLongueur; } }; void Rectangle::afficher(const string message) { cout << message << endl << "longueur : " << longueur << endl << "largeur : " << largeur << endl << "perimetre : " << perimetre() << endl << "surface : " << surface() << endl << "diagonale : " << diagonale() << endl << endl; } // pour consulter l'écran d'exécution void continuer() { char reponse ; cout << "\nAppuyez sur une lettre suivie de Entree " ; cin >> reponse ; } void demo1() { cout << "Demonstration #1 : " << endl; Rectangle r1(6.3, 5.2), r2(4.5); r1.afficher("Infos de r1"); r2.afficher("Rectangle r2 "); Rectangle r3 = r1; r3.afficher("Infos de r3"); Rectangle r4(r2); r4.afficher("Infos de r4"); cout << "La longueur de r2 : " << r2.getLongueur() << endl; r2.setLongueur( r2.getLongueur() * 2); r2.afficher("Nouvelles coordonnees de r2"); Rectangle r5; r5.afficher("Infos de r5"); cout << endl << "Fin de demo 1\n\n"; } void afficher(Rectangle rect[], int nbRect, string mess = "au debut") { cout << "Infos des " << nbRect << " rectangle(s) " << mess << " : \n"; for(int i = 0; i < nbRect; i++) rect[i].afficher(""); } void demo2() { cout << "Demo 2 : " << endl; Rectangle rect[] = { Rectangle(6.2, 3.8), Rectangle(4.5), Rectangle(3.1, 2.7), Rectangle(8.6, 5.2), Rectangle(4.5, 2.7), Rectangle(5.1, 1.8)}; int nbRect = sizeof(rect) / sizeof(Rectangle); cout << nbRect << endl; afficher(rect, nbRect); cout << endl << "Fin de demo 2\n\n"; } int main() { demo1(); demo2(); continuer(); return 0; } /* Exécution: Demonstration #1 : Appel au construteur a 2 parametres Appel au construteur a 1 parametre Infos de r1 longueur : 6.3 largeur : 5.2 perimetre : 23 surface : 32.76 diagonale : 8.16884 Rectangle r2 longueur : 4.5 largeur : 4.5 perimetre : 18 surface : 20.25 diagonale : 6.36396 Appel du constructeur de recopie Infos de r3 longueur : 6.3 largeur : 5.2 perimetre : 23 surface : 32.76 diagonale : 8.16884 Appel du constructeur de recopie Infos de r4 longueur : 4.5 largeur : 4.5 perimetre : 18 surface : 20.25 diagonale : 6.36396 La longueur de r2 : 4.5 Nouvelles coordonnees de r2 longueur : 9 largeur : 4.5 perimetre : 27 surface : 40.5 diagonale : 10.0623 Appel au constructeur sans parametre Quelles sont les valeurs de longueur et de largeur ? 7.2 5.8 Infos de r5 longueur : 7.2 largeur : 5.8 perimetre : 26 surface : 41.76 diagonale : 9.24554 Fin de demo 1 Demo 2 : Appel au construteur a 2 parametres Appel au construteur a 1 parametre Appel au construteur a 2 parametres Appel au construteur a 2 parametres Appel au construteur a 2 parametres Appel au construteur a 2 parametres 6 Infos des 6 rectangle(s) au debut : longueur : 6.2 largeur : 3.8 perimetre : 20 surface : 23.56 diagonale : 7.27186 longueur : 4.5 largeur : 4.5 perimetre : 18 surface : 20.25 diagonale : 6.36396 longueur : 3.1 largeur : 2.7 perimetre : 11.6 surface : 8.37 diagonale : 4.11096 longueur : 8.6 largeur : 5.2 perimetre : 27.6 surface : 44.72 diagonale : 10.0499 longueur : 4.5 largeur : 2.7 perimetre : 14.4 surface : 12.15 diagonale : 5.24786 longueur : 5.1 largeur : 1.8 perimetre : 13.8 surface : 9.18 diagonale : 5.40833 Fin de demo 2 Appuyez sur une lettre suivie de Entree*/