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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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...

+ 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