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 :

Question conceptuelle utilisation d'une classe dans un map


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut Question conceptuelle utilisation d'une classe dans un map
    Bonjour,

    J'ai une classe B encapsulée dans la class A.
    Je déclare ensuite un map de n class B. Je désire ensuite de l'extérieur pouvoir accéder aux fonctions de B, j'ai donc déclaré une fonction GetpB(index); qui me retourne un pointeur sur ma class B de position index. J'utilise enfin ce pointeur pour accéder aux fonctions membres de B.
    Est-ce que cette approche est valable?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class A
    {
    public:
       class B
       {
           f1();
           f2();
       };
    protected:
       std::map<int,B> m_map;
    public:
        B* GetpB(int index);
    };
     
    ...
     
    A::B* A::GetpB(int index)
    {
       std::map<int,B>::iterator it;
       it = m_map.find(index);
       if (it!=m_mapBV.end())
           return (&it->second);
    }
    plus loin dans le code principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        A a;
        a->GetpB(1)->f1();

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    euh je crois que si tu ne mets pas de pointeur dans la map autant ne pas retourner de pointeur dans ta méthode

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Citation Envoyé par hiko-seijuro Voir le message
    euh je crois que si tu ne mets pas de pointeur dans la map autant ne pas retourner de pointeur dans ta méthode
    Je pensais pouvoir faire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    A a;
    A::B *pb = a->GetpB(1);
    pb->f1();
    pb->f2();
    ...

  4. #4
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    Est-ce que cette approche est valable?
    Pour moi, elle ne pose pas de poblème.

    euh je crois que si tu ne mets pas de pointeur dans la map autant ne pas retourner de pointeur dans ta méthode
    Et pourquoi pas ? Un pointeur c'est une addresse, et l'opérateur & retourne bien une addresse.

    Par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A::B* A::GetpB(int index)
    {
       std::map<int,B>::iterator it;
       it = m_map.find(index);
       if (it!=m_mapBV.end())
           return (&it->second);
    }
    Les paranthèse n'aportent pas plus de précision : retour l'addresse de it ou celle de second.

    Pour enlever l'ambiguïté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return &(it->second);

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    En fait, à moins que tu n'aie une bonne raison d'utiliser un pointeur, il est toujours préférable d'utiliser les références (éventuellement constante) quand tu veux renvoyer un membre (ou un élément d'un conteneur qui est membre) de ton objet...

    D'abord parce que ca te permet de travailler consemment avec des . plutot qu'avec des déréférencements -> (on n'imagine pas, mais le simple fait de ne pas avoir à se poser la question de savoir lequel utiliser, ca facilite la vie ), ensuite parce que si tu utilise un pointeur, tu risque toujours d'être tenté de libérer la mémoire de celui-ci avec delete, croyant que tu n'en a plus besoin, alors la gestion de cet élément échoit à une autre variable
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    je me suis mal exprimé ce que je voulais dire c'est que tel que je voyais son truc il allait manipulé 2 trucs différents enfin bref

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/12/2006, 20h45
  2. [Débutant] Utilisation d'une classe dans une servlet
    Par stokoma1981 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 28/09/2006, 15h11
  3. Réponses: 4
    Dernier message: 25/07/2006, 16h30
  4. Utilisation d'une classe dans un autre fichier
    Par melotron dans le forum Général Python
    Réponses: 1
    Dernier message: 09/07/2006, 13h11
  5. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34

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