/* IFT1166 - démonstration #9 - exercice 03 18-novembre -2005 v1.01 M.Lokbani - MàJ pour A05 19-avril -2005 v1.00 M.Lokbani - énoncé examen final Hiver 2005. 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: ------------ Pour chacune des méthodes (incluant le constructeur) de la classe C, indiquer si la compilation des méthodes de la classe C provoque des erreurs (y compris les warnings). Si oui dites pourquoi et proposer une solution, si c’est possible. */ #include using namespace std; class C{ int x; public: C(int y) x(y) {}; /* correcte? incorrecte? ====> Incorrecte: Pourquoi? Il manque les : C(int y):x(y) {}; */ void f(const C &a) { x = a.x; } /* correcte? incorrecte? ====> Incorrecte: Pourquoi? affectation classique. x est un membre de C. */ void g(C& a) const{ x = 10; } /* correcte? incorrecte? ====> Incorrecte: Pourquoi? g est supposée être une fonction constante. De ce fait, elle ne peut pas permettre un changement à la valeur de x. */ int h(int& y){ return y*0.5; } /* correcte? incorrecte? ====> correcte: Pourquoi? Cependant vous allez avoir l'avertissement suivant: warning: converting to `int' from `double' */ int j(const int* y) const{ *y = 10; } /* correcte? incorrecte? ====> incorrecte: Pourquoi? -1- Erreur: Le contenu du pointeur y est constant et ne peut pas être modifié. -2- Avertissement: La méthode est supposée retourner un "int". */ int k(const int& y) const{ y = 10; } /* correcte? incorrecte? ====> incorrecte: Pourquoi? -1- Erreur: y est une référence constante, on ne peut pas la modifier. -2- Avertissement: La méthode est supposée retourner un "int". */ };