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

Discussion :

Comment récupérer une variable d'une classe à une autre ?

  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 34
    Par défaut Comment récupérer une variable d'une classe à une autre ?
    Bonjour, tout d'abord désolé si je poste au mauvais endroit. Cette question est purement du c++ mais vu que j'utilise Qt pour illustrer mon problème, je le place ici, n'hésitez pas à déplacer si besoin.
    Mon problème est le suivant : j'ai une classe principale A. Je définis un objet "Aobj" qui à un slot dont la fonction est d'attribuer une valeur (10) à une variable d'une classe B. Jusque là, ça semble fonctionner. Par la suite, je voudrais qu'une classe C est également accès à la valeur de la classe B de sorte qu'une variable de la classe C ait la même valeur que la variable de la classe B. Or là, la valeur de la variable n'est pas transmise et je ne comprend pas pourquoi.

    Pour rendre les choses un peu plus claires, voici un code épuré qui illustre mon problème

    Lorsque je clique sur le bouton, j'obtiens le résultat suivant
    A::slotChange = 10
    A::slotChange, Bobj->getVar() = 10
    Value : -1843854648
    A::slotChange, Cobj->getVar() = -1843854648


    • main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <QApplication>
    #include "A.h"
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        A Aobj;
        Aobj.show();
     
        return app.exec();
    }
    • A.h

    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
    29
    30
    31
    #ifndef ACLASS
    #define ACLASS
     
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
     
    #include <B.h>
    #include <C.h>
     
    #include <iostream>
     
    class A : public QWidget
    {
        Q_OBJECT
     
        public:
            A();
            ~A();
     
            B *Bobj;
            C *Cobj;
     
        public slots:
            void slotChange();
     
        private:
            QPushButton *m_button;
    };
     
    #endif //ACLASS
    • A.cpp

    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
    #include "A.h"
     
    A::A() : QWidget()
    {
        Bobj = new B();
        Cobj = new C();
     
        m_button = new QPushButton("Click here");
        m_button->show();
     
        QObject::connect(m_button, SIGNAL(clicked()), this, SLOT(slotChange()));
    }
     
    A::~A()
    {
        delete Bobj;
        delete Cobj;
    }
     
    void A::slotChange()
    {
      int var = 10;
      std::cout << "A::slotChange = " << var << std::endl;
      Bobj->setVar(var);
      std::cout << "A::slotChange, Bobj->getVar() = " << Bobj->getVar() << std::endl;
      std::cout << "A::slotChange, Cobj->getVar() = " << Cobj->getVar() << std::endl;
     
    }
    • B.h

    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
    #ifndef BCLASS
    #define BCLASS
     
    class B
    {
        public:
            B();
            ~B();
     
            void setVar(int var);
            int getVar();
     
        private:
            int m_myvariable;
    };
     
    #endif // BCLASS
    • B.cpp

    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
    #include <B.h>
     
    B::B()
    {
     
    }
     
    B::~B()
    {
     
    }
     
    void B::setVar(int var)
    {
        m_myvariable = var;
    }
     
     
    int B::getVar()
    {
        return m_myvariable;
    }
    • C.h

    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
    #ifndef CCLASS
    #define CCLASS
     
    #include <B.h>
     
    #include <iostream>
     
    class C
    {
        public:
            C();
            ~C();
     
            B *Bobj;
     
            int getVar();
     
        private:
    };
     
    #endif // CCLASS
    • C.cpp

    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
    #include <C.h>
     
    C::C()
    {
        Bobj = new B();
     
    }
    C::~C()
    {
        delete Bobj;
    }
     
    int C::getVar()
    {
        std::cout << "Value : " << Bobj->getVar() << std::endl;
        return Bobj->getVar();
    }
    Merci d'avance car bien que ce problème soit basique, je sèche complètement.

  2. #2
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 477
    Par défaut
    C'est normal, tu as deux Bobj. Le premier est crée dans A, et lorsque tu reçois la valeur tu l'affectes bien à cet objet B. Et tu en as un autre que tu crée dans C. Lui tu ne lui affecte jamais de valeur. Donc comme toujours en C++, il contient n'importe quoi.
    Donc soit dans slotChange() tu affectes une valeur à C (Cobj->setVar(var)), et tu vires l'objet B dans C.

    Soit tu t'arranges que le B soit partagé par A et C, par exemple en fournissant un pointeur de B dans le constructeur de C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class C
    {
        public:
            C(B* b) : Bobj(b) { }
            ~C();
     
            B *Bobj;
     
            int getVar();
     
        private:
    };
    Tout dépend ce que tu veux faire en fait, dur de le deviner avec des classes qui s'appellent A, B, et C

    Alors maintenant deux trois conseils, au passage:

    1 ) initialise toutes tes variables dans le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B() : m_myvariable(0) {}
    2 ) Donne des noms compréhensible à tes classes !

    3 ) Je sais que c'est un code d'exemple, mais on sait jamais : ici ton QPushButton n'est jamais désalloué. La bonne pratique avec Qt c'est de fournir le parent dans le constructeur (new QPushButton(this, "blabla") ) comme ça l'a destruction de A entraînera la destruction du bouton.

    Bon courage.

Discussions similaires

  1. [PHP 5.4] Comment récupérer et transformer un résultat d'une variable
    Par yule dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2014, 09h47
  2. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  3. Comment récupérer le contenu du contenu d'une variable ?
    Par Zebulon777 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/11/2010, 10h46
  4. [Smarty] Récuper une variable php à partir d'une variable Smarty
    Par SPKlls dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/04/2008, 17h40
  5. [Free Pascal] [2.2] Impossible d'assigner une variable de type T à une variable de type T
    Par Hibou57 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 12/10/2007, 12h31

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