• # que devrait retourner au getter?

    Posté par . 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:

     auto vect = a.getvect();
     for ( auto it = vect.begin(); it != vect.end(); it++ )
     std::cout << *it;

    ou plus simplement:

     for ( auto item : a.getvect() )
     std::cout << item;

    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
     {
     return i;
     }

    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.