/* IFT1166 - démonstration #8 - exercice 03 12-novembre -2005 v1.04 M.Lokbani - MàJ pour A05 31-octobre -2003 v1.03 M.Lokbani - De démo06exo3 MàJ pour démo07exo2 22-octobre -2003 v1.02 M.Lokbani - gcc3.2 +comments. 15-octobre -1999 v1.01 P.Langlais - +comments 05-octobre -1999 v1.00 M.Lokbani - énoncé + corrigé. contact: lokbani@iro.umontreal.ca Copyright (C) 2003-2005 Université de Montréal Département d'informatique et de Recherche Opérationnelle Mohamed Lokbani -- Tous Droits Réservés -- All Rights Reserved -- Description: Le but de cet exercice est l'utilisation du constructeur, destructeur et constructeur de recopie. Les points saillants: 1) new appelle tjs un constructeur (après la création de l'objet) 2) delete, tjs le destructeur (avant la destruction de l'objet) 3) constructeur par recopie dans des situations comme a) passage d'un argument par valeur, b) retour par valeur d'un objet par une fonction c) initialisation d'un objet avec un autre objet du même type, ssi au moment de la déclaration => Cas d'initialisation par un autre objet (!= affectation) 4) il existe un constructeur par défaut => recopie partielle */ #include using namespace std; class compte { float solde; int nip; static int nb; public: ~compte () { cout << "D "<< nb << endl; nb--; } compte (float m, int n) { nb++; solde = m; nip =n; cout << "C "<< nb << endl; } compte (const compte& autre){ nb++; solde = autre.solde; nip = autre.nip; cout << "R " << nb << endl; } static void affiche(){ cout << "nb: " << nb << endl; } }; int compte::nb = 0; int main(){ compte c1(100, 111); // C compte c2(200, 222); // C compte c3 = c2; // R compte c4(c1); // R c3 = c2; // affectation compte* pc = new compte(800, 333); // C delete pc; // D compte* pc2 = new compte(c1); // R delete pc2; // D compte banque[3] = {c1, c2, c3}; // R R R banque[0].affiche(); // Et puis tous les deletes (D) dans n'importe quel ordre. return 0; } /* >demo8exo3sol C 1 C 2 R 3 R 4 C 5 D 5 R 5 D 5 R 5 R 6 R 7 nb: 7 D 7 D 6 D 5 D 4 D 3 D 2 D 1 >Exit code: 0 */