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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

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

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    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 émérite

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    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 émérite
    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
    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 éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    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* ???

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