/* IFT1166 - démonstration #8 - exercice 06 12-novembre -2005 v1.03 M.Lokbani - MàJ pour A05 31-octobre -2003 v1.02 M.Lokbani - gcc3.2 +comments. 02-novembre -1999 v1.01 M.Lokbani - +comments 12-octobre -1999 v1.00 M.Lokbani - énoncé + corrigé. contact: lokbani@iro.umontreal.ca Copyright (C) 1999-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 de définir une classe canonique Id. Une classe canonique est une classe qui contient: - constructeur (un ou plusieurs), - destructeur - constructeur de recopie - l'opérateur d'affectation. */ #include using namespace std; class Id { char *nom; public: Id(); ~Id(); Id(const Id&); Id& operator=(Id); }; // constructeur Id::Id() { char tab[256]; // Attention le nom ne doit pas dépasser 256 chars \0 inclus. cout << "Entrez votre nom: " << endl; cin >> tab; nom = new char[1+strlen(tab)]; strcpy(nom,tab); cout << "constructeur a été appelé" << endl; } // destructeur Id::~Id() { cout << "Mon nom est: " << nom << endl; delete nom; cout << "destructeur a été appelé" << endl; } // constructeur de recopie Id::Id(const Id& x) { nom = new char[1+strlen(x.nom)]; strcpy(nom,x.nom); cout << "constructeur de recopie a été appelé" << endl; } // surcharge de l'opérateur d'affectation Id& Id::operator=(Id x) { if (this != &x) { nom = new char[1+strlen(x.nom)]; strcpy(nom,x.nom); } cout << "opérateur d'affectation a été appelé" << endl; return *this; } // un exemple d'utilisation int main() { Id id1,id2; Id id3 = id2; id1 = id3; return 0; } /* >demo8exo6sol Entrez votre nom: Marc constructeur a été appelé Entrez votre nom: Marie constructeur a été appelé constructeur de recopie a été appelé constructeur de recopie a été appelé opérateur d'affectation a été appelé Mon nom est: Marie destructeur a été appelé Mon nom est: Marie destructeur a été appelé Mon nom est: Marie destructeur a été appelé Mon nom est: Marie destructeur a été appelé >Exit code: 0 Explication de la sortie .... // ====> Id id1 Entrez votre nom: Marc constructeur a été appelé // ====> Id id2 Entrez votre nom: Marie constructeur a été appelé // ====> Id id3 = id2 constructeur de recopie a été appelé // ====> id1 = id3; // Vu qu'on effectue un passage de paramètres => constructeur de recopie constructeur de recopie a été appelé // Puis l'affectation .... opérateur d'affectation a été appelé // Puis le destructeur du paramètre passe par valeur est détruit Mon nom est: Marie destructeur a été appelé // ====> } fin de main // 3 constructeurs donc 3 destructeurs Mon nom est: Marie destructeur a été appelé Mon nom est: Marie destructeur a été appelé Mon nom est: Marie destructeur a été appelé */