Que doit retourner un getter? Est-ce une copie de ce qui est dans l'objet ou est-ce un moyen d'accéder à ce qui est dans l'objet? Tu as choisi de retourner une copie, pourquoi pas.
Maintenant tu appelles 2 fois la fonction getvect(), elle te retourne donc à chaque fois une copie. Et bien évidemment tu ne peux pas aller du début d'une copie à la fin d'une autre copie! Quand tu appelles 2 fois une fonction comme tu l'as fait, tu peux t'attendre ne pas toujours avoir le même résultat. Il faudrait donc écrire:
Mais le plus souvent on préfère que le getter retourne une référence constante à ce qui est dans l'objet. En écrivant:
std::vector<int>const&getvect()const{returni;}
on donne la possibilité à celui qui appelle getvect() d'utiliser directement la donnée incluse ou bien d'en faire une copie. Alors mes 2 exemples et ton code fonctionnent. L'inconvénient de cette méthode est que ce qui est retourné est non modifiable. Mais c'est plutôt un avantage, c'est quand même dangereux de permettre à une entité externe d'agir sur des données interne à ton objet.
Le moyen de donner cet accès en modification, c'est le code que t'as indiqué @Dareg. Mais c'est plutôt à éviter.
# que devrait retourner au getter?
Posté par dalfab . En réponse au message conteneur en retour de fonction. Évalué à 6.
Bonjour,
Que doit retourner un getter? Est-ce une copie de ce qui est dans l'objet ou est-ce un moyen d'accéder à ce qui est dans l'objet? Tu as choisi de retourner une copie, pourquoi pas.
Maintenant tu appelles 2 fois la fonction
getvect(), elle te retourne donc à chaque fois une copie. Et bien évidemment tu ne peux pas aller du début d'une copie à la fin d'une autre copie! Quand tu appelles 2 fois une fonction comme tu l'as fait, tu peux t'attendre ne pas toujours avoir le même résultat. Il faudrait donc écrire:ou plus simplement:
Mais le plus souvent on préfère que le getter retourne une référence constante à ce qui est dans l'objet. En écrivant:
on donne la possibilité à celui qui appelle
getvect()d'utiliser directement la donnée incluse ou bien d'en faire une copie. Alors mes 2 exemples et ton code fonctionnent. L'inconvénient de cette méthode est que ce qui est retourné est non modifiable. Mais c'est plutôt un avantage, c'est quand même dangereux de permettre à une entité externe d'agir sur des données interne à ton objet.Le moyen de donner cet accès en modification, c'est le code que t'as indiqué @Dareg. Mais c'est plutôt à éviter.