Bonjour,
Je suis un débutant en C++ et je suis en train de voir la surcharge d'opérateur.
Il y a une partie qui me pose problème, en effet, je ne comprends pas pourquoi il est impératif de mettre une référencer au type de sorti quand on veut pouvoir faire des appels en cascade.
De ce que j'avais compris, une référence et l'objet de la référence sont équivalents et du coup, je ne comprends pas pourquoi les appels en cascade ne fonctionne pas si je ne mets pas la référence.
Voici le code sur lequel je travaille :
J'ai deux classes, Utilisateur et Groupe.
Groupe.h
Groupe.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Groupe { public: Groupe& operator+=(Utilisateur* user); private: vector<Utilisateur*> utilisateurs_; }
Dans le main.cpp je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Groupe& Groupe::operator+=(Utilisateur* user) { utilisateurs_.push_back(user); return*this; }
Je ne comprends pas pourquoi si je supprime la référence de sorti et que j'écris : Groupe operator+=(Utilisateur* user); à la place de Groupe& operator+=(Utilisateur* user); (pas que dans le .h bien sûr), ça ne marche plus. A chaque +=, le programme crée un nouveau Groupe contenant à chaque fois un nouvel Utilisateur (le dernier += retourne un Groupe avec les 5 Utilisateurs) et à la fin de la ligne, 4 constructeurs sont appelés et le Groupe "groupe" ne contient qu'un utilisateur, u1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Utilisateur* u1 = new Utilisateur("Martin"); Utilisateur* u2 = new Utilisateur("Franklin"); Utilisateur* u3 = new Utilisateur("Geraldine"); Utilisateur* u4 = new Utilisateur("Bernard"); Utilisateur* u5 = new Utilisateur("Christian"); Groupe* groupe = new Groupe("vacances"); ((((*groupe += u1) += u2) += u3) += u4) += u5;
Je ne comprends pas en quoi retourner un Groupe à la place d'un Groupe& change quoi que ce soit. Si quelqu'un peut m'expliquer, je lui en serai très reconnaissant.
Merci !
Partager