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 :

surcharger l'opérateur >>


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 187
    Par défaut surcharger l'opérateur >>
    salut
    comment je peux surcharger l'opérateur >> pour qu'il puisse lire des entiers dans une classe donnée
    merci

  2. #2
    Membre éclairé Avatar de cynique
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Par défaut
    Citation Envoyé par phenix1988 Voir le message
    salut
    comment je peux surcharger l'opérateur >> pour qu'il puisse lire des entiers dans une classe donnée
    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MaClasse &operator >>( MaClasse &source, int &entier )
    {
      // blah blah
     
      return source;
    }
    Tu ne dois que remplacer le "// blah blah" avec ton code qui extraire un entier de "source".

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    cynique >> non, ce que tu proposes est faux et ne compile même pas.

    Regardez tous les deux la FAQ, ya la réponse dedans
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 17
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    cynique >> non, ce que tu proposes est faux et ne compile même pas.

    Regardez tous les deux la FAQ, ya la réponse dedans
    Ca compile:

    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
    #include <iostream>
    using namespace std;
     
    class MaClasse{};
     
    MaClasse &operator >> ( MaClasse &source, int &entier )
    {
      // blah blah
     
      return source;
    }
     
    MaClasse &operator << ( MaClasse &source, const int &entier )
    {
      // blah blah
     
      return source;
    }
     
    int main () {
     
        MaClasse A;
     
        int b;
     
        A >> b;
        A << b;
     
        return 0;
    }

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Si ca compile c'est car c'est comme surchager l'opérateur virgule et l'opérateur &.
    Exemple:
    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
     
    #include <iostream>
    using namespace std;
     
    class MaClasse{};
     
    MaClasse &operator >> ( MaClasse &source, int &entier )
    {
      // blah blah
     
      return source;
    }
     
    MaClasse &operator << ( MaClasse &source, const int &entier )
    {
      // blah blah
     
      return source;
    }
     
    int main () {
     
        MaClasse A;
     
        int b;
     
        A >> b;
        A << b;
     
        return 0;
    }
    Il n'y a aucune différence sémantique avec ton code, sauf que >> est devenu , et que << est devenu &.

    Si on fait les choses dans les règles, la FAQ est la marche ca suivre.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 17
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Si ca compile c'est car c'est comme surchager l'opérateur virgule et l'opérateur &.
    Exemple:
    Est-ce que ça veut dire que ça marche

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #include <iostream>
    using namespace std;
     
    class MaClasse
    {
        public:
            size_t taille_pile;
            int pile[10];
            bool erreur;
     
            MaClasse() : taille_pile(0), erreur(false) {
                ;
            }
            operator bool () {
                return !erreur;
            }
    };
     
    MaClasse &operator >> ( MaClasse &source, int &entier )
    {
        if (source.taille_pile == 0)
        {
            source.erreur = true;
        } else {
            entier = source.pile[source.taille_pile];
            source.taille_pile--;
        }
     
        return source;
    }
     
    MaClasse &operator << ( MaClasse &source, const int &entier )
    {
        if (source.taille_pile == 9)
        {
            source.erreur = true;
        } else {
            source.taille_pile++;
            source.pile[source.taille_pile] = entier;
        }
     
        return source;
    }
     
    int main () {
     
        MaClasse A;
     
        int b;
     
        if (!(A << 32 << 28  << 0 << 12))
        {
            cout << "Erreur lors du chargement de chiffres" << endl;
            return 1;
        }
     
        while (A >> b)
        {
            cout << "Depilage: " << b << endl;
        }
     
        return 0;
    }

  7. #7
    Membre éclairé Avatar de cynique
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    cynique >> non, ce que tu proposes est faux et ne compile même pas.

    Regardez tous les deux la FAQ, ya la réponse dedans
    ça dépend. Mon code marche pour faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      MaClasse a(...);
     
      int un_entier;
      int un_autre_entier;
     
      a >> un_entier >> un_autre_entier;
    Je ne sais pas pourquoi on voudrait faire une telle chose. Peut-être j'ai malcompris la question. C'est possible.

    Et definitivement je ne comprends pas ce que tu dis avec & et ,

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 187
    Par défaut
    david si tu postes des liens ce sera plus sympa

  9. #9
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    http://cpp.developpez.com/faq/cpp/?p...teur_affichage



    (y'a une fonction recherché dans la faq..)

  10. #10
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Goten, c'est bien pour leurs apprendre à utiliser cette fonction que je ne donne pas le lien.

    Il est bien plus bénéfique de chercher par soi même (en sachant que le réponse existe) que de cliquer sur un lien tout donné car ca incite à ne faire aucun efforts de recherche.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  11. #11
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    J'ai longuement hésité à le donné... Mais en même temps le fait de tapé operator>> dans un champ de recherche c'est à la portée de tout le monde... et je suis pas sur que ça est un quelconque intérêt pédagogique.

  12. #12
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par Goten Voir le message
    J'ai longuement hésité à le donné... Mais en même temps le fait de tapé operator>> dans un champ de recherche c'est à la portée de tout le monde... et je suis pas sur que ça est un quelconque intérêt pédagogique.
    Si, car ca force à chercher et ca montre que la proframmation n'est pas un monde où les solutions viennent toutes seules en cliquant sur un lien.

    Comment fera t'il quand sa solution sera au fond d'un fil sur clc++ s'il ne prend pas l'habitude de chercher dès maintenant ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. [C#] Tri d'objet et surcharge d'opérateur
    Par Royd938 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/12/2007, 00h26
  2. Petit probléme de surcharge d'opérateur .
    Par Clad3 dans le forum C++
    Réponses: 20
    Dernier message: 11/04/2005, 20h15
  3. Problème de surcharge d'opérateurs
    Par Hell dans le forum C++
    Réponses: 17
    Dernier message: 17/01/2005, 16h01
  4. Cumul de surcharges d'opérateurs
    Par Nats dans le forum C++
    Réponses: 2
    Dernier message: 11/10/2004, 13h37
  5. [VB .NET] Surcharge d'opérateur
    Par Franckintosh dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/09/2004, 19h05

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