[C++] dérivation simultanée d'ifstream et d'ofstream

Issa

Nouveau membre
Bonjour à tous.

Je n'arrive pas à définir une classe lisant dans un fichier et écrivant dans un autre :

[cpp]
#include <fstream>
#include <iostream>
using namespace std;

class texte : public ifstream, public ofstream
{
public:
texte(void) : ifstream("in.txt"), ofstream("out.txt")
{}
};

int main(void)
{
texte t;
int c = t.ifstream::get();
cout << c << "\n";
}[/cpp]

A l'exécution le programme m'affiche '-1' ce qui montre que le flux d'entrée n'est pas valide. Par contre si ma classe 'texte' n'hérite que d' ifstream (sans hériter d'ofstream, donc) la lecture est correcte.
Merci de m'aider : pourquoi le méchanisme d'héritage ofstream -> texte bloque-t-il mon flux d'entrée ?
 

mdevlieg

Nouveau membre
Le probleme est très simple, une classe ne peut hérité que d'une seule classe.
Pour qu'une classe puisse écrire et lire un fichier elle n'a pas besoin d'herité des deux classes de bases, elles peut directement utilisé les fonctions.
 

clemsouille

Nouveau membre
Pour utiliser une classe pas besoin d'en hériter. La classe Camion peut hériter de Vehicule, car elle a les mêmes comportements : accelerer, ralentir, tourner etc...

Camion peut avoir un comportement supplémentaire comme charger décharger.

Ta classe texte, on dit qu'elle est cliente des classes iostream.

En C++, on ne peut pas bricoler en essayant des trucs au hazard.
Tu as besoin d'un bon bouquin de C++. Je te conseille Delanoy.

Pour ton exemple voici un début.

[cpp]
#include <fstream>
#include <iostream>
using namespace std;

class texte
{
public:
texte(istream &in, ostream &out) : _in(in), _out(out) {}

void zou() {
char c = 0;
while (_in.get(c)) { _out.put(c);}
}

private:
istream &_in;
ostream &_out;
};

int main(void)
{
ifstream in("in.txt");
ofstream out("out.txt");

texte t(in, out);
t.zou();
}[/cpp]

Contrairement à ce que t'indique mdevlieg, en C++ on peut hériter de plusieurs classes mais on essaye d'éviter car cela pose des problèmes quand les deux classes héritées sont elles-même dérivées d'un même classe de base.
 

KangOl

Grand Maître
c'est le genre de up que j'aime bien, ils donnent une bonne réponse avec en plus un exemple...
 

frodon1

Grand Maître

Il n'y pas que le C++ qui connaisse l'héritage multiple. (je connais au moins qui l'implémente aussi)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 001
Membres
1 586 388
Dernier membre
mery2005
Partager cette page
Haut