/* Historique: ----------- Module: demo12exo3sol.h Auteur: Mohamed Lokbani Date création: 23 novembre 1999 Version: 1.04 Modifications: 07 décembre 2003 - M.Lokbani - comments + gcc3.2 23 juin 2000 - M.Lokbani - mise à jour E00 gcc2.95 30 mars 2000 - M.Lokbani - modifications des commentaires 05 décembre 1999 - M.Lokbani - correction mineure sur le destructeur 30 novembre 1999 - M.Lokbani - écriture du code à partir de l'idée de base décrite dans le livre de B.Stroustrup uniquement pour la partie maptable. Le reste est une belle cuisine interne! Copyright (C) 2003 Université de Montréal Département d'informatique et de Recherche Opérationnelle Mohamed Lokbani -- Tous Droits Réservés -- All Rights Reserved -- Description: ci-joint la solution qu'à une partie de l'exo 3, je vous laisse faire le reste! Puisque la fstream dérive aussi de la classe ostream, l'inverse n'est pas vrai ; je suis parti déclarer le pointeur de fichier comme étant un ostream au lieu d'un ofstream. La raison pour cela, est que je voulais compacter le code et faire d'une pierre deux coups, i.e.: si le fichier de sortie n'est pas la, alors je dirige l'affichage vers la sortie standard. Je peux faire de même pour l'entrée et lire à partir de l'entrée standard i.e. le clavier au lieu d'un fichier. Je ne l'ai pas fait, si ça vous chante, vous avez juste a remplacer les ifstream un peu partout dans le code par des istream et le tour est joue. Celles et ceux qui sont plus familiers avec le C, c'est l'équivalent d'un test de ce genre: si file_out désigne le nom de fichier en sortie et si ce nom existe, alors: if (file_out){ // fct interne Fopen: ouvrir le fichier + test d'ouverture outfile = Fopen(file_out, "wt"); }else{ outfile = stdout; // sinon sortie standard. } puis on écrit vers outfile, si le fichier ça sera vers le fichier sinon c'est l'écran. */ #include #include #include #include #include #ifndef _StatMot_ #define _StatMot_ using namespace std; class StatMot { private: ifstream *entree; // fichier en entrée ostream *sortie; // fichier ou sortie standard void maptable(); public: StatMot(char *fichier_in,char *fichier_out=""); void readitems(map&, ifstream&); ~StatMot() { entree->close(); if (sortie != &cout) delete sortie; } }; #endif