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 :

le pointeur this sait sur quoi pointer ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut le pointeur this sait sur quoi pointer ?
    Bonjour à toutes et à tous,
    Voici un code généré par Qt Creator :
    fichier mainwindow.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow) // parent pointe vers rien dans la déclaration de la fonction
    {
        ui->setupUi(this);    
    }
    On a donc le constructeur de la classe MainWindow. Quand je pointe le curseur de la souris sur ui entre les accolades, cela marque le type "Ui::MainWindow".
    Maintenant quand je pointe le curseur sur this il est marqué "Mainwindow". Au début cela ne me choquait pas : cela n'est que récemment que j'ai compris que les deux types Ui::MainWindow et MainWindow étaient différents. Bref...*

    Ensuite quand je regarde le fichier main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w; // appel du constructeur pour construire l'objet w
        w.show(); // affichage de la fenêtre   
        return a.exec();
    }
    ça a fait tilt : en fait le this pointe sur l'objet w !
    Mais c'est là où je coince : comment this sait que c'est sur w de type MainWindow qu'il faut pointer, alors qu'à l'appel du constructeur, l'objet est en cours de création, donc pas achevé ? Merci et passez une bonne journée.

  2. #2
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Dans toutes les fonctions membres d'une classe (constructeur et destructeur compris), le this est passé en paramètre caché. Le compilateur le rajoute automatiquement.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    Mais c'est là où je coince : comment this sait que c'est sur w de type MainWindow qu'il faut pointer, alors qu'à l'appel du constructeur, l'objet est en cours de création, donc pas achevé ? Merci et passez une bonne journée.
    L'objet a beau être en cours de création, toutes les données qui sont nécessaire à son instanciation sont déjà allouées.
    Ainsi, l'objet a une existence propre juste avant l'appel au constructeur.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pardon mais je n'ai toujours pas compris : vous dites que l'objet existe avant d'être construit : c'est paradoxal non ? Une maison n'existe pas avant qu'elle soit finie d'être construite : sinon elle est en cours de construction (40%, 50%) : elle existe certes mais n'est pas complète donc on ne peut pas l'utiliser : si par exemple le raccordement à EDF n'est pas fait alors on ne peut pas brancher la TV ou le PC afin de poster un message concernant le pointeur this mdr ...
    Non ? Pardonnez-moi mais ça me choque.

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour gizmo27

    Ne confond pas les choses :
    - quand tu places ta souris sur "this" et que Qt Creator t'indique le type, c'est juste une fonctionnalité de Qt Creator, qui parcourt ton code pour connaître le types.
    - this est forcement un pointeur vers la classe qui le contient. Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow) // parent pointe vers rien dans la déclaration de la fonction
    {
        ui->setupUi(this);    // on est dans la classe MainWindow donc this est de type MainWindow*
    }
    - quelques petites précautions à prendre du l'utilisation de this dans un constructeur : FAQ C++

    Bonne continuation

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

Discussions similaires

  1. Question sur le pointeur this
    Par Core8 dans le forum C++
    Réponses: 4
    Dernier message: 29/03/2007, 14h31
  2. pointeur this - c++ builder
    Par mathieu57 dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/03/2006, 14h19
  3. Pointeur de fonctions sur méthode
    Par Glosialabolas dans le forum C++
    Réponses: 9
    Dernier message: 04/12/2005, 14h55
  4. Problème de boot , ne sait plus quoi faire ...
    Par timZeR0 dans le forum Administration système
    Réponses: 3
    Dernier message: 02/12/2005, 18h01
  5. [MFC] Pointeur this et fonctions statiques
    Par Yellowmat dans le forum MFC
    Réponses: 5
    Dernier message: 08/02/2005, 10h15

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