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 :

Problème avec les operators overloaded


Sujet :

C++

  1. #1
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut Problème avec les operators overloaded
    Ami du soir, bonsoir !

    C'est re-l'enquiquineur de service !
    J'espère que je ne flood pas trop... mais je ne sais pas si c'était une bonne idée de mettre un problème complètement différent à la suite de mon précédent message. J'ouvre donc ce nouveau topic...

    Voila, je voudrais overloader l'operator "+" d'une classe.

    Mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        player play1 = player(1 , "Kimy_Ire"); //créer un joueur
        card card1 = card(); //créer une carte
        play1 = play1 + card1; //serait sencé attribuer une carte à un joueur
        play1.info(); //vérification
    Vous l'aurez compris, je souhaiterai pouvoir ajouter un élément "card" à un joueur avec le signe "+".

    Mon player.h :
    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
    class player
    {
          private:
                  int id;
                  std::string name;
                  bool GM;
                  bool mayor;
                  int t;
     
                  card player_card;
     
          public:        
                 player(int id_player, std::string name_player);
                 //Liste de toutes les méthodes...
     
                 player operator + (card c);
     
     
    };

    Mon player.ccp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void player::give_card(card c)
    {
         player_card = c;
    }
     
     
    player player::operator + (card c)
    {
           give_card(c);
    }
    J'ai retiré toutes les mentions inutiles. Bref, j'ai un soucis de compréhension, je pense. Je ne sais pas pourquoi cela plante. En effet, je n'ai pas de message d'erreur mais le compilateur plante complètement...

    J'ai essayé de remplacer toutes les "card c" par des "card *c" ainsi qu'aux endroits appropriés lors des définitions mais cela m'a juste conduit à avoir des erreurs de compilation du type :
    no match for 'operator+' in 'play1 + *card1'
    J'ai essayé l'ajout de "return this" à la fin de "player player::operator + (card c)" sans réel succès...

    J'espère que vous pourrez m'aider !

    Merci infiniment du temps que vous prendrez pour moi par avance !


    Kimy from Ireland.
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  2. #2
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonsoir,
    Je pense que tu devrais commencer par t'intéresser aux références.
    Parce que là, tu fais beaucoup de copies d'objets pour rien.


    D'autre part, la sémantique de l'opérateur « + » est généralement : « À partir de deux instances qui ne seront pas modifiées, créer une nouvelle instance ».
    Cela ne correspond pas vraiment à ce que tu veux faire.

    En effet, l'instruction play1 = play1 + card1 peut se décomposer ainsi :
    1. Utiliser play1 et card1 sans les modifier pour créer une nouvelle instance de player (operator+) ;
    2. Remplacer le contenu de play1 par l'instance nouvellement créée (operator=).

    Encore une fois, beaucoup de création/copie/affectation pour rien.


    Ici, c'est plutôt l'opérateur « += » que tu devrais utiliser.
    « À partir d'une instance qui ne sera pas modifiée, modifier la valeur d'une autre instance, et retourner cette instance ».

    Ce n'est pas une obligation, mais l'opérateur « + » est souvent implémenté à partir de l'opérateur « += » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TYPE operator + (TYPE const& lhs, TYPE const& rhs)
    {
        TYPE ret = lhs;
        return ret += rhs;
    }
     
    /***********************/
     
    TYPE1 TYPE1::operator + (TYPE2 const& rhs) const
    {
        TYPE1 ret = *this;
        return ret += rhs;
    }

    Voilà, maintenant à toi de jouer.
    Il ne reste plus qu'à écrire un opérateur « += ».

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Perso, sémantiquement, ça me gène d'additionner des pommes et des poires. Il se semblerait plus logique d'utiliser l'opérateur <<

  4. #4
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Pas faux...

    +1

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Merci pour votre aide ! Je vous tiens au courant pour la suite !
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Kimy_Ire Voir le message
    En effet, je n'ai pas de message d'erreur mais le compilateur plante complètement...

    Ton compilateur ou ton programme plante ??

    S'il s'agit d'un plantage à l'exécution, il faudrait voir card car c'est probablement un problème de copie de cette classe.

    Sinon, +1000 avec gbdivers et ses pommes et ses poires.

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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