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 :

[POO] Opérateurs & Héritage


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Points : 49
    Points
    49
    Par défaut [POO] Opérateurs & Héritage
    Bonjour,

    je m'amuse comme un petit fou en découvrant l'héritage. Rien à redire c'est génial, vive le cpp.
    Mais avant de coder avec mes pieds, je viens demander des conseils.

    Quand une classe B hérite de A. On peut dire que B est un A avec généralement des variables membres supplémentaires.

    Comment gerer tout ceci dans le cadre des opérateurs. J'aimerais que par exemple dans mes opérateurs amis istream & ostream réutiliser ceux de la classe mère. J'ai essayé en utilisant une méthode propre à chaque classe qui est virtuelle. Dans le cas de B je force l'appel à A avant de continuer ce qui est seulement necessaire à B.

    Dans A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    virtual void affiche(ostream &s=cout);
    friend ostream& operator<<(ostream &s, A &a);
     
    void A::affiche(ostream &s)
    {
         s<<nom<<blabla<<blublu;
    }
    ostream& operator<<(ostream &s, A &a)
    {
        a.affiche(s);
        return s;
    }
    Dans B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void affiche(ostream &s=cout);
    void B::affiche(ostream &s=cout)
    {
         A::affiche(s);
         s<<endl<<MembreDeBSeulement;
    }
    Est-ce une bonne manière de faire ? Puis-je faire pareil pour l'opérateur = et le constructeur de recopie ?

  2. #2
    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
    1/ Une utilisation polymorphe des objets va généralement mal avec une sémantique de valeur. Or les membres virtuels n'ont d'utilité que dans le cadre d'une utilisation polymorphe, et les opérateurs vont très souvent de pair avec une sémantique de valeur.

    2/ La technique d'appeler la version du membre de la classe de base dans l'implémentation d'un membre virtuel dans une classe dérivée est courante.

    3/ Dans une implémentation d'un constructeur (qu'il soit de copie ou non), il faut appeler un constructeur pour les classes de base.

    4/ Un opérateur << stylistiquement correct a plus de gestion à faire que ce que tu n'en fais (au moins pour gérer la largeur du champs).


    PS: suis-je le seul agacé par ce constructeur de recopie au re inutile?

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Points : 49
    Points
    49
    Par défaut
    Tout d'abord, je suis entièrement d'accord pour l'histoire du "re", mais je l'ai vu tellement de fois sur dvp que j'ai cru faire moins "martien" ..

    Sans vouloir paraitre impolit, je n'ai pas tout compris tout ce que tu à voulus me répondre.

    Si je comprends bien, je fait bien d'appeler la version membre et puis de faire ce que j'ai à faire. Pour moi j'ai l'impression que ça rend la programmation plus modulaire.
    Ce qui me chatouille: pour appeler la fonction "mère" je suis obligé de créer une vraie fonction que je peux "virtualiser"

    Que peut-on faire faire de plus à un opérateur << ?

    Sinon dans ta première réponse... euh comment dire... je suis pas du tout familier avec le vocabulaire objet ...

    Merci de m'avoir donné une réponse aussi rapidement !

  4. #4
    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
    Citation Envoyé par Haknaton Voir le message
    Ce qui me chatouille: pour appeler la fonction "mère" je suis obligé de créer une vraie fonction que je peux "virtualiser"

    Que peut-on faire faire de plus à un opérateur << ?
    Fonctionner de manière sensée si quelqu'un fait un setw() avant.

    Sinon dans ta première réponse... euh comment dire... je suis pas du tout familier avec le vocabulaire objet ...
    Les membres virtuels et les opérateurs vont rarement ensemble.

    Merci de m'avoir donné une réponse aussi rapidement !
    Ca tient plus au hasard qu'à autre chose.

Discussions similaires

  1. Opérateur et héritage
    Par Alfred12 dans le forum C++
    Réponses: 6
    Dernier message: 17/01/2007, 17h57
  2. [Débutant] [POO] Problème d'héritage
    Par fire.stone dans le forum Langage
    Réponses: 3
    Dernier message: 01/10/2006, 00h21
  3. [POO] virtual et héritage
    Par poukill dans le forum C++
    Réponses: 4
    Dernier message: 27/07/2006, 16h27
  4. [POO] Constructeur et héritage
    Par LDDL dans le forum Langage
    Réponses: 3
    Dernier message: 23/05/2006, 22h44
  5. [POO]Interdire l'héritage
    Par Coulon Arnaud dans le forum Langage
    Réponses: 7
    Dernier message: 06/04/2005, 17h20

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