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 :

Méthode qui retourne une référence à un conteneur


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut Méthode qui retourne une référence à un conteneur
    Salut,

    J'aimerais avoir votre avis sur la validité d'une méthode de classe qui retournerait une référence de conteneur (qui serait un de ses attributs), par exemple :

    vector<Child*>& getChildren();

    J'ai le sentiment que ce n'est pas très correct mais je ne sais pas dire pourquoi en dehors du fait que ça viole l'encapsulation.

    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour quelle raison as-tu besoin de donner un accès en écriture à ce tableau ?

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Laurent Gomila
    Pour quelle raison as-tu besoin de donner un accès en écriture à ce tableau ?
    Le but serait d'éviter d'avoir un accès plus immédiat (et donc probablement plus rapide) aux données que si je devais appeler la classe en lui demandant à chaque fois combien elle a d'éléments dans son vector (GetChildrenCount()) puis en lui demandant plein d'éléments de son vecteur par le biais d'indices (GetChild(i)).

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Ça brise pas mal l'encapsulation, en effet.

    Une solution parfois c'est d'avoir une interface à base d'itérateurs, avec des fonctions begin(), end(), ... Comme ça au moins tu peut changer de conteneur de façon transparente.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    tu peux le renvoyer en référence const

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const vector<Child*> & getChildren();

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par nikko34
    tu peux le renvoyer en référence const

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const vector<Child*> & getChildren();

    Ca veut die que je ne pourrai pas modifier le vector ? Mais quand même les instances référencées par Child* ???

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    Citation Envoyé par tnarol
    Ca veut die que je ne pourrai pas modifier le vector ? Mais quand même les instances référencées par Child* ???
    c'est peut être pas une bonne idée finalement

    Tu es sûr que ton traitement tu ne peux pas le faire dans la classe qui contient le vector? Sinon il y a des fois où on a pas le choix, même si ça brise l'encapsulation.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    GetChild et GetChildrenCount, si vraiment ça te bouffe tes perfs (question que je ne me poserais pas personnellement avant d'avoir utilisé un profiler...), tu peux les mettre inline, ainsi tu n'auras aucun surcoût.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/01/2012, 09h28
  2. Réponses: 3
    Dernier message: 03/12/2010, 18h29
  3. Méthode qui retourne une valeur aléatoire, soit 1, soit 2
    Par absot dans le forum Général Java
    Réponses: 11
    Dernier message: 15/10/2010, 09h31
  4. Réponses: 5
    Dernier message: 29/05/2008, 10h05
  5. une méthode qui retourne une valeur
    Par soujava dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 17/04/2008, 14h29

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