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 :

"operator +"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Par défaut "operator +"
    Salut,
    je suis un débutant C++ et je n'arrive pas à écrire la fonction operator+ qui permet l'addition de 2 abr et de créer un autre formé par les mots de 2 abr
    quelles sont les étapes pour écrire cette fonction?
    Merci
    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
    class Noeud
    {
    private:
        string mot;
        Noeud *pGauche;
        Noeud *pDroite;
     
    public:
        Noeud(string word);
        Noeud  * chercher(string un_mot);
    };
     
    class ABR
    {
    private:
        Noeud * pRacine;
        string path;
     
    public :
        ABR();
        ABR(string chemin);//creer un abr avec le contenu du fichier
        ~ABR();
     
        void ajouter(string un_mot);
        friend ABR& operator+(const ABR &x, const ABR& y);
    };
     
    ABR &operator +(const ABR &x, const ABR &y)
    {  
        ...............  
    }

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 871
    Par défaut
    - Je ne vois pas l'utilite d'utiliser un friend dans le cas present.
    - Tu n'auras qu'a faire un truc du genre pour retourner un nouvel ABR :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ABR *operator +(const ABR &x, const ABR &y)
    {
      return new ABR(x.path + y.path);
    }
    Par contre si tu veux juste ajouter la chaine de caracteres contenue dans un autre ABR, la demarche est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ABR &operator +(const ABR &x)
    {
      path += x.path;
      return *this;
    }

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Par défaut RE
    lors de la compilation il m'affiche
    " `ABR* ABR::operator+(const ABR&, const ABR&)' must take either zero or one argument "

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par imperio Voir le message
    - Je ne vois pas l'utilite d'utiliser un friend dans le cas present.
    - Tu n'auras qu'a faire un truc du genre pour retourner un nouvel ABR :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ABR *operator +(const ABR &x, const ABR &y)
    {
      return new ABR(x.path + y.path);
    }
    L'allocation dynamique ne doit pas être utilisée (ici).

    Citation Envoyé par imperio Voir le message
    Par contre si tu veux juste ajouter la chaine de caracteres contenue dans un autre ABR, la demarche est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ABR &operator +(const ABR &x)
    {
      path += x.path;
      return *this;
    }
    L'operateur + n'a pas le rôle de l'opérateur +=

    Regarder cette entrée de la FAQ pour avoir une signature de l'opérateur + correcte :
    http://cpp.developpez.com/faq/cpp/?p...embre_ou_libre
    (L'opérateur + doit retourner un nouvel ABR)

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Par défaut RE
    je n'ai pas compris
    comment faut-il faire exactement ?
    je ne peux pas accéder a la fonction ajouter qui se trouver dans la classe ABR

  6. #6
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

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

    As tu lu la FAQ donnée dans le lien ? As tu compris ce que Ehonn expliquait ?
    Quel rapport avec la fonction "ajouter" ?
    Quel est le code appelant ces fonctions ?

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Une remarque qui n'apporte pas de solution, mais qui me parait importante: une fonctionnalité qui fusionne 2 arbres n'a aucune raison de s'appeler "+".

    Une des trois règles de bases concernant les opérateurs, c'est que "chaque fois que la signification d'un opérateur n'est pas manifestement claire et incontestée, il ne doit pas être surchargé."

    Autrement dit, lorsqu'on voit le code arbre1 + arbre2, on ne sait pas clairement et sans ambiguïté quel sera le résultat. Il ne faut donc un opérateur pour cette opération, mais plutôt une fonction du type Fusion( const Arbre &, const Arbre &); ou quelque chose de cet ordre.

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Bonjour

    As tu lu la FAQ donnée dans le lien ? As tu compris ce que Ehonn expliquait ?
    Quel rapport avec la fonction "ajouter" ?
    Quel est le code appelant ces fonctions ?
    j'ai lu la FAQ ce n'est pas mon cas
    la fonction ajouter permet d'ajouter un mot à l'ABR
    la question exacte c'est de redéfinir l’opérateur +

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

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