/* IFT1169 - démonstration #09 - exercice 04 - 01-avril -2006 v1.04 M.Lokbani - gcc3.4.2 31-mars -2004 v1.03 M.Lokbani - Ajustement du Champ3 12-novembre -2003 v1.02 M.Lokbani - comments + gcc3.2 02-novembre -1999 v1.01 M.Lokbani - + comments 12-octobre -1999 v1.00 M.Lokbani - code & comments contact: lokbani@iro.umontreal.ca Copyright (C) 1999-2006 Université de Montréal Département d'informatique et de Recherche Opérationnelle Mohamed Lokbani -- Tous Droits Réservés -- All Rights Reserved -- Description: ------------ Cet exercice a été proposé à l'examen Final session Hiver 2000. Il montre la généralisation d'une classe template ayant deux paramètres de types. Question: --------- Écrire la définition d'une classe dérivée ClasseDerivee, qui dérive publiquement de la classe de base ClasseBase et qui contient les membres suivants: - un membre donnée Champ3 du type Type2 - un seul constructeur - une fonction Print() pour afficher les membres données de la classe de base et de la classe dérivée. */ #ifndef H_EXO2 #define H_EXO2 #include using namespace std; template class ClasseBase { protected: Type1 Champ1; Type2 Champ2; public: ClasseBase() {} ClasseBase(Type1 arg1, Type2 arg2):Champ1(arg1), Champ2(arg2) {} virtual void Print(){ cout << Champ1 << ' ' << Champ2 << endl; } }; template class ClasseDerivee:public ClasseBase { private: Type2 Champ3; public: // Attention: Le constructeur doit être appelé de manière générique: ClasseBase // vu que la classe de base est une classe template. ClasseDerivee(Type1 champ1,Type2 champ2,Type2 champ3='\0'):ClasseBase(champ1,champ2){ Champ3 = champ3; } void Print() { ClasseBase::Print(); // sinon, vu que les membres Champ1 et Champ2, sont déclarés protected, // nous pouvions faire aussi: cout << Champ1 << ' ' << Champ2 << endl; cout << Champ3 << endl; } }; #endif