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 :

Visiter les noeuds d'un arbre, accéder aux données encapsulées


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut Visiter les noeuds d'un arbre, accéder aux données encapsulées
    Bonjour à toutes et à tous,
    Je suis tout nouveau tout neuf !

    J'ai créé une classe pour représenter un arbre :

    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 TreeNode
    {
        public:
            TreeNode* m_parent;
     
            TreeNode() ;
            TreeNode(DataTypeForTree data) ;
            TreeNode(DataTypeForTree data, int ID) ;
            TreeNode(DataTypeForTree data, std::vector<TreeNode* > children) ;
            TreeNode(DataTypeForTree data, std::vector<TreeNode* > children, int ID) ;
     
            ~TreeNode() ;
            void SearchDeepFirst (VisitorInterface* visitor) ;
            int GetID(void) const ;
            void SetChildren (std::vector<TreeNode* > children) ;
            void SetParent (TreeNode* parent);
            void Accept(VisitorInterface* visitor);
     
     
        private:
            std::vector<TreeNode* > m_children ;
            DataTypeForTree m_data ;
            int m_ID ;
    };
    Je sais qu'il y a beaucoup de pointeurs et qu'on peut peut-être s'en passer, mais ce sera dans un second temps, là j'essaie surtout de faire mes dents
    Je voudrais savoir comment je peux faire pour accéder intelligemment aux données contenues dans chaque node, encapsulées dans m_data. cet attribut m_data est un objet, qui peut être assez compliqué (pour l'instant c'est volontairement très simple, mais ça va pas le rester très longtemps)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class ExampleData : public DataTypeForTree
    {
        public:
            ExampleData();
            ExampleData(int value);
            virtual ~ExampleData();
            int getValue();
     
        private:
        int m_value;
    };
    Le code pour le visiteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class VisitorDataToString : public VisitorInterface
    {
        public:
            VisitorDataToString();
            virtual ~VisitorDataToString();
            void visitNode(TreeNode* node){
        std::cout << node->m_data.GetValue();
    }
     
        protected:
        private:
    };
    Bref vous vous douterez bien que ça ne marche pas, le compilateur m'interdit l'accès à m_data qui est privé. Du coup je me demandais si c'était le bon moment d'utiliser l'amitié entre classes ?
    Merci d'avance pour vos réponses,
    Bien cordialement,

  2. #2
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Bonjour,

    l'idée de visiteur c'est :
    • le visiteur expose une fonction qui prend en paramètre une référence vers une donnée ;
    • le visité expose une fonction qui prend une référence vers un visiteur.


    Et ça s'utilise comme ça :
    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
    25
    26
    27
    28
    class Visitor;
    class BlackBox;
     
    class Visited
    {
        BlackBox _data;
    public:
        void visit(Visitor& v)
        {
            v(_data);
        }
    };
     
    class Visitor
    {
    public:
        void operator()(BlackBox& data)
        {
            // ...
         }
    };
     
    int main(void)
    {
        Visited structure;
        Visitor treatment;
        structure.visit(treatment);
    }
    À toi d'adapter

  3. #3
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut
    Merci pour ta réponse !

    J'ai bidouillé dans tous les sens, j'ai fait 10 heures de RTFM et ça a fini par marcher, ô miracle
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TreeGrid/Ajax] Charger dynamiquement les noeuds de l'arbre
    Par verbose dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 20/03/2013, 11h41
  2. Réponses: 3
    Dernier message: 16/06/2010, 10h19
  3. Comparer les noeuds de deux arbres.
    Par p1xl_01 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 04/02/2010, 14h00
  4. Relation ! schéma ! comment accèder aux données ?
    Par julien.63 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/06/2006, 21h14
  5. Accéder aux données d'un sous formulaire
    Par jkembo dans le forum Access
    Réponses: 6
    Dernier message: 28/04/2006, 16h38

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