-
héritage et surcharge
Bonjour à tous
Voila je developpe sous microsoft visual c++6 et je me demandais si il était possible de surcharger virtuellement l'opérateur de sortie << voila un apercu de mon code :
class Mere //class abstraite
{
......
virtual fstream & operator << (fstream & sortie)=0;
....
}
class Fille : public Mere
{
.....
virtual fstream & operator << (fstream & sortie);
....
}
Jusque là aucun problème de compilation cependant si j'appelle la fonction de cette manière :
Mere *ptr;
sortie<<(*ptr);
J'obtiens l'erreur suivante :
error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class Mere' (or there is no acceptable conversion)
Je vous remercie d'avance =)
@bientot
-
Tu as mal définis les paramètres de l'opérateur :
Code:
friend std::ostream& operator << (std::ostream& O, const MaClasse& B)
Tu peux regarder : http://c.developpez.com/faq/cpp/?pag..._polymorphique
-
Dans une déclaration d'opérateur binaire membre, this est l'opérande de gauche.
Tu peux arriver au résultat que tu cherches en définissant un opérateur non membre qui appelle une fonction membre virtuelle.
-
en effet je n'avais pas pensé à cette solution merci beaucoup si j'ai bien compris je devrais donc avoir un code du genre :
class Mere //class abstraite
{
......
virtual void ecritureSortie(fstream &sortie)=0;
friend fstream & operator << (fstream &sortie,const Mere & M){ecritureSortie(sortie);}
....
}
class Fille : public Mere
{
.....
virtual void ecritureSortie(fstream & sortie);
....
}
en tout cas je vais tenter encore merci
bonne soirée ^^
-
Code:
virtual void ecritureSortie(fstream &sortie) const =0;
;)
-
oups :?
je ne me souviens plus de l'utilité du const = 0, et de son effet quelqu'un pourrait-il me raffraichir la mémoire ?
merci ^^
-
Le const signifie que l'instance ne va pas être modifié dans le cas de l'appel de cette méthode. Le =0 signifie que c'est une méthode abstraite (virtuelle pure) (elle n'est pas définie). Tu as donc une classe abstraite qui n'est pas instanciable.
-
merci beaucoup tout est clair
@bientot bonne soirée
++