[C++] surcharge des operateurs >> et fichier
Résolu/Fermé
kiroukou
Messages postés
22
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
8 novembre 2005
-
15 avril 2005 à 07:47
Ader - 25 avril 2008 à 00:45
Ader - 25 avril 2008 à 00:45
8 réponses
FileOf est une classe virtuelle pure
On appelle ça une classe abstraite.
Hoùlà !!! Pas beau !!! Regarde, y'à qu'un seul caractère dans ta chaîne. Ca marche pas pour les int, juste pour les chiffres de 0 à 9 !!
Voilà ce que je te conseille de faire :
Sinon, fais plutôt un _filestr.open (_fileName, std::fstream::in );
On appelle ça une classe abstraite.
void operator>>( R_File_of_Int wf, int& val) { char chaine[1]; wf._filestr.read (chaine,sizeof(char)); wf.from_string( chaine, val ); }
Hoùlà !!! Pas beau !!! Regarde, y'à qu'un seul caractère dans ta chaîne. Ca marche pas pour les int, juste pour les chiffres de 0 à 9 !!
Voilà ce que je te conseille de faire :
void operator>>( R_File_of_Int wf, int& val) { wf._filestr >> val; }
Sinon, fais plutôt un _filestr.open (_fileName, std::fstream::in );
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
16 avril 2005 à 16:18
16 avril 2005 à 16:18
salut, le operator>> return un &ostream et non un void
le operator<< return un &istream et non un void. Donc ta signature devrait etre :
le operator<< return un &istream et non un void. Donc ta signature devrait etre :
friend istream& operator>>(const istream& is, R_File_Of_Int& rf); friend ostream& operator<<(const ostream& os, R_File_Of_Int& rf); //Les définitions : istream& operator>>(const istream& is, R_File_Of_Int& rf) { ... return is; } friend ostream& operator<<(const ostream& os, R_File_Of_Int& rf) { ... return os; }
Exact, j'avais zappé ça.
Mais dans le cas de kirikou ce serais plutôt un FileOf_Int& à la place de istream&...
Mais dans le cas de kirikou ce serais plutôt un FileOf_Int& à la place de istream&...
kiroukou
Messages postés
22
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
8 novembre 2005
17 avril 2005 à 13:13
17 avril 2005 à 13:13
Merci à tous pour vos reponse :)
Enfait j'ai résolu le problème en mettant la surcharge de l'opérateur >> en fonction memre et non plus en fonction amie, et en faisant comme SKZ le dit :)
Je me suis emmélé avec les in et out au moment de l'ouverture aussi :)
Merci de vos reponses , c'est tres sympas !!
++
Enfait j'ai résolu le problème en mettant la surcharge de l'opérateur >> en fonction memre et non plus en fonction amie, et en faisant comme SKZ le dit :)
Je me suis emmélé avec les in et out au moment de l'ouverture aussi :)
Merci de vos reponses , c'est tres sympas !!
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Wani
Messages postés
2
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005
19 avril 2005 à 20:44
19 avril 2005 à 20:44
Bonjour,
Je voudrais créer une classe en C++ qui permet de gérer des fichiers de n´importe quel type. Ce serait une classe fichier de X ou X pourrait etre n´importe quelle classe ou type. En clair, je veux pouvoir sauvegarder et restaurer dans un fichier une suite finie de données de n´importe quel type.
Etant encore novice en C++, je pense créer une classe Template FICHIER d´ou je creerais 2 classes dérivées permettant d´ecrire ou de lire dans un fichier. Le type de données a enregistrer dans le fichier serait donc fourni dans le programme apppelant.
Au vu de ton message sur le forum, tu as apparemment expérimenté la gestion des fichiers en C++.
Serait-il possible que tu me donnes quelques pistes ? ta classe <fileof> me semble fort intéressante.
Merci beaucoup d´avance.
WT
Je voudrais créer une classe en C++ qui permet de gérer des fichiers de n´importe quel type. Ce serait une classe fichier de X ou X pourrait etre n´importe quelle classe ou type. En clair, je veux pouvoir sauvegarder et restaurer dans un fichier une suite finie de données de n´importe quel type.
Etant encore novice en C++, je pense créer une classe Template FICHIER d´ou je creerais 2 classes dérivées permettant d´ecrire ou de lire dans un fichier. Le type de données a enregistrer dans le fichier serait donc fourni dans le programme apppelant.
Au vu de ton message sur le forum, tu as apparemment expérimenté la gestion des fichiers en C++.
Serait-il possible que tu me donnes quelques pistes ? ta classe <fileof> me semble fort intéressante.
Merci beaucoup d´avance.
WT
Y'a aucun soucis pour faire ce que tu veux, même pas besoin de classe fille :
Avec getElem et addElem qui peuvent être les operateur << et >>.
Ceci dis, cette classe ne fait rien en soit. Tout le travail se situe dans chaque des classes que tu veux sérialiser (puisque pour les types de base comme int, float ou string, les stream savent déjà le faire).
Pour chacun de ses classes, il faudra que tu définisse l'opérateur << et >>.
Et à partir du moment où il sont défénis pour xhaque classe, à quoi sert la classe, FileOf<>, puisqu'on peut utiliser directement les fstream ???
template class FileOf<class T> { FileOf(); virtual ~FileOf(); T getElem(); void addElem(); private: fstream fs; };
Avec getElem et addElem qui peuvent être les operateur << et >>.
Ceci dis, cette classe ne fait rien en soit. Tout le travail se situe dans chaque des classes que tu veux sérialiser (puisque pour les types de base comme int, float ou string, les stream savent déjà le faire).
Pour chacun de ses classes, il faudra que tu définisse l'opérateur << et >>.
Et à partir du moment où il sont défénis pour xhaque classe, à quoi sert la classe, FileOf<>, puisqu'on peut utiliser directement les fstream ???
Wani
Messages postés
2
Date d'inscription
mardi 19 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005
23 avril 2005 à 10:13
23 avril 2005 à 10:13
merci beaucoup SKZ et Kiroukou
Je vais analyser tout ca et pondre quelquechose :)
Petite remarque : j´insère des éléments de classe X dans mon fichier en les transformant en chaines de caractères et ceci avec une fonction :
char* ConversionChaine(const X& x);
Inversement quand je dois récupérer un élément j´ai une fonction inverse qui me restaure intacte toute donnée x traduite en chaine.
Je vais analyser tout ca et pondre quelquechose :)
Petite remarque : j´insère des éléments de classe X dans mon fichier en les transformant en chaines de caractères et ceci avec une fonction :
char* ConversionChaine(const X& x);
Inversement quand je dois récupérer un élément j´ai une fonction inverse qui me restaure intacte toute donnée x traduite en chaine.
kiroukou
Messages postés
22
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
8 novembre 2005
21 avril 2005 à 06:50
21 avril 2005 à 06:50
Salut Wani :)
Oui je me suis amusé un peu avec tout ça.
Tu peux trouver les sources ici. Il reste des problemes je pense (des petits), le nom des classes est a changer au plus vite (je n'ai pas eu le choix pour mon tp ;)).
Si vous avez des remarques a me faire là dessus, je les prend avec plaisir :)
http://lesitekilestbien.free.fr/sources/Cpp_be6.zip
++
Oui je me suis amusé un peu avec tout ça.
Tu peux trouver les sources ici. Il reste des problemes je pense (des petits), le nom des classes est a changer au plus vite (je n'ai pas eu le choix pour mon tp ;)).
Si vous avez des remarques a me faire là dessus, je les prend avec plaisir :)
http://lesitekilestbien.free.fr/sources/Cpp_be6.zip
++