IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

héritage et surcharge


Sujet :

C++

  1. #1
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut 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

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Tu as mal définis les paramètres de l'opérateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    friend std::ostream& operator << (std::ostream& O, const MaClasse& B)
    Tu peux regarder : http://c.developpez.com/faq/cpp/?pag..._polymorphique

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    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.

  4. #4
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    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 ^^

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual void ecritureSortie(fstream &sortie) const =0;

  6. #6
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    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 ^^

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    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.

  8. #8
    Membre actif Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Points : 207
    Points
    207
    Par défaut
    merci beaucoup tout est clair
    @bientot bonne soirée
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Héritage et surcharge
    Par SofEvans dans le forum Débuter
    Réponses: 10
    Dernier message: 09/04/2009, 15h19
  2. Réponses: 6
    Dernier message: 08/02/2008, 14h58
  3. [Problème] Héritage et surcharge
    Par kamykaze dans le forum C++
    Réponses: 8
    Dernier message: 13/11/2007, 14h18
  4. [POO] Héritage et surcharge de méthodes
    Par defkid dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2007, 14h51
  5. [G++] Héritage et surcharge de fonction
    Par Beuss dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 15/05/2006, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo