2011-05-27 4 views
2

Hey les gars, im avoir des problèmes quand je veux créer une classe appelée fichiers qui utilise fstreamcomment implémenter une classe qui hérite forme fstream

#include<iostream> 
#include<fstream> 
class Files:public fstream { 
    public: 
     Files(const char* s,ios_base::openmode mode = ios_base::in | ios_base::out):fstream(s,ios_base::openmode mode = ios_base::in | ios_base::out) 
    }; 

Est-ce que quelqu'un sait quels paramètres dois-je utiliser sur le constructeur?

+0

il devrait être aussi simple que, 'Fichiers (const char * s, ios_base :: Mode openmode = ios_base :: en | ios_base :: out): fstream (s, mode) ' – iammilind

+3

c'est un exemple parfait de la façon dont * pas * d'utiliser l'héritage. Vous nous l'avez dit dans la première phrase: "Files" utilise un "fstream", et non "est un fstream". Il vaut donc mieux ajouter une variable membre de type fstream à Fichiers et vous n'avez plus besoin de résoudre votre problème. –

Répondre

2

Ne répétez pas les paramètres par défaut. Votre code devrait ressembler à ceci:

#include<iostream> 
#include<fstream> 

class Files : public std::fstream { 
    public: 
     Files(const char* s, 
      std::ios_base::openmode mode = ios_base::in | ios_base::out) 
     : fstream(s, mode) 
     {} 
}; 

Cela dit, vous voudrez peut-être envisager d'utiliser Boost.Iostreams si vous voulez définir vos propres classes de flux. Surpasser toutes les méthodes correctes des flux standard est une douleur.

-2

Ne pas hériter de classes qui ne dispose pas des Destructeurs virtuels

+1

Pas de problème si seulement des fonctions non virtuelles sont ajoutées à la classe. – neuront

+7

Ce n'est pas une bonne généralisation et ne s'applique pas. 'std :: fstream' a un destructeur virtuel car hérite de (par exemple)' std :: ostream' qui a un destructeur déclaré virtuel. (ISO/IEC 14882: 2003 12.4 [class.dtor [/ 7 dit "Si une classe a une classe de base avec un destructeur virtuel, son destructeur (qu'il soit déclaré par l'utilisateur ou implicitement) est virtuel.") –

Questions connexes