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 operator<<


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Par défaut héritage et operator<<
    Bonjour à tous j'ai un petit porblème sans doute fort simple mais je n'arrive pas à trouver une solution:
    J'ai une classe Mère et une classe Fille, chacune ayant "redéfinie" les opérateurs de flux, je voudrais utiliser l'opérateur de flux de la classe mère (dans la surcharge de la classe fille) pour initialiser les membres hérités de la classe mère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    struct C_Mere
    {
    //Attributs
    	unsigned int m_uiMembreMere;
     
    //Méthodes de sauvegarde/chargement des données
     
    	friend istream& operator>> (istream& in, C_Mere& l_mere)
    	{
    		in >> l_mere.m_uiMembreMere;
    	}
     
    	friend ostream& operator<< (ostream& out, const C_Mere& l_mere);
    	{
    		out << l_mere.m_uiMembreMere << endl;
    	}
    };
     
    struct C_Fille : C_Mere
    {
    //Attributs
    	unsigned int m_uiMembreFille;
     
    //Méthodes de sauvegarde/chargement des données
     
    	friend istream& operator>> (istream& in, C_Fille& l_fille)
    	{
    		in >> l_fille.m_uiMembreFille;
    		//ici, comment utiliser l'operator>> de la classe Mere pour initialiser m_uiMembreMere??
    	}
     
    	friend ostream& operator<< (ostream& out, const C_Fille& l_fille);
    	{
    		out << l_fille.m_uiMembreFille << endl;
    		//ici, comment utiliser l'operator<< de la classe Mere pour écrire m_uiMembreMere??
    	}
    };

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Déjà, il faut une petite feinte pour gérer correctement objets polymorphiques :
    http://c.developpez.com/faq/cpp/?pag..._polymorphique

    Dans ta classe fille ça donnerait donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    virtual std::ostream& C_Fille::Print(std::ostream& Stream)
    {
        C_Mere::Print(Stream);
        Stream << ...;
     
        return Stream;
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Ca ne serait pas possible d'utiliser un cast pour réutiliser la surcharge préalablement définie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	friend ostream& operator<< (ostream& out, const C_Fille& l_fille);
    	{
    		out << l_fille.m_uiMembreFille << endl;
    		out << (C_Mere)l_fille << endl;
    	}

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si, mais plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out << static_cast<const C_Mere&>(l_fille);
    Et puis comme de toute façon ici il faudra passer par une fonction membre, ça ne sert à rien.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Heu tu pourrais donner une rapide explication s'il te plait ?
    Car en cours on n'a jamais vu de "cast statique" on a toujours utilisé les casts de manière "naturelle" ^^

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Le cast "naturel" dont tu parles est le cast de type C.
    En C++, le cast statique (donc déterminé à la compilation) est un static_cast.

    Après, en dynamique, tu as le dynamic_cast, etc...

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Car en cours on n'a jamais vu de "cast statique" on a toujours utilisé les casts de manière "naturelle" ^^
    Ce que tu appelles "cast naturel" ici on appelle ça au mieux un cast C, et parfois un cast bourrin.
    Je t'invite à lire ceci :
    http://c.developpez.com/faq/cpp/?page=conversions

    PS : tu peux changer de prof tout de suite...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Normalement, on peut faire ça sans un cast explicite, non?
    Du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	friend ostream& operator<< (ostream& out, const C_Fille& l_fille);
    	{
    		out << l_fille.m_uiMembreFille << endl;
    		const C_Mere & l_mere = l_fille;
    		out << l_mere << endl;
    	}
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Normalement, on peut faire ça sans un cast explicite, non?
    Oui mais dans ce cas le cast implicite est encore plus verbeux que le cast explicite, donc bon...

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Merci pour toutes ces présisions, je matterai le lien un jour (autant se tenir informé!).
    Cependant il ne faut pas remettre mon prof en cause, on n'a pas encore tout vu en C++, mais bon je me tiens au courant sur Developpez car faut combler les lacunes

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

Discussions similaires

  1. Surcharge operator==, héritage
    Par Invité dans le forum Débuter
    Réponses: 6
    Dernier message: 19/07/2013, 10h15
  2. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  3. Réponses: 16
    Dernier message: 21/05/2007, 01h04
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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