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 :

Pointeur sur l'objet parent

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Pointeur sur l'objet parent
    Bonjour à toutes et à tous,

    C'est une question d'ordre général.
    Alors j'ai la classe QObject (classe de base) dont dérive une classe QFille (le nom importe peu ici) : le constructeur de la classe QFille est le suivant : J'ai vu une fonction de QObject qui est setParent()
    Ma question : étant donné que QFille hérite de QObject, si je crée un seul objet de type QObject, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject *papa=new QObject // création du pointeur papa + creation de l'objet *papa avec new + renvoie à papa de l'adresse de l'objet crée *papa
    et un seul objet de type QFille, par exemple , l'objet *papa sera "parent" de l'objet fille (car QFille hérite de QObject), pas besoin de préciser avant que *papa est parent de fille en faisant : ?
    Merci à vous à bientôt.

  2. #2
    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

    Si tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Fille : public QObject
    {
       Fille(QObject* parent) : QObject(parent) {}
    };
     
    QObject* papa=new QObject;
    QFille fille;
    Alors, non, l'objet fille n'a pas "papa" pour parent (en fait, ce code donnera même une erreur puisque le constructeur de "Fille" prend 1 paramètre, qui n'est pas fournit). Il faut définir le parent explicitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Fille : public QObject
    {
       Fille(QObject* parent) : QObject(parent) {}
    };
     
    QObject* papa=new QObject;
    QFille fille(papa);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Fille : public QObject
    {
       Fille(QObject* parent = 0) : QObject(parent) {}
    };
     
    QObject* papa=new QObject;
    QFille fille;
    fille.seParent(papa);

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ce qui me froisse encore : *parent n'est-il pas parent de fille ? Puisque de surcroît QFille hérite de QObject, donc les objets héritent eux aussi des objets parents non ?

  4. #4
    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
    Euh... j'ai pas compris

    J'ai l'impression que tu n'as pas compris la POO, non ?

    Peux tu détailler, ligne par ligne, comment tu comprends le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Fille : public QObject
    {
       Fille(QObject* parent) : QObject(parent) {}
    };
     
    QObject* papa=new QObject;
    QFille fille(papa);

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class QFille : public QObject // la classe QFille hérite des éléments publics de QObject
    {
       QFille(QObject* parent) : QObject(parent) {} // hum... je ne saisis pas cette igne là :oops:... c'est bizarre... on dirait l'implémentation d'un constructeur le QObject(parent) fait partie de la liste d'initialisation non ? Cette ligne me perturbe vraiment
    };
     
    QObject* papa=new QObject; // création du pointeur papa + creation de l'objet *papa avec new + renvoie à papa de l'adresse de l'objet crée *papa
    QFille fille(papa); // construction de l'objet fille de type QFille avec pour paramètre le pointeur papa qui pointe vers l'objet *papa
    Ne dites rien... C'est archi faux non ?

  6. #6
    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
    Citation Envoyé par gizmo27 Voir le message
    Ne dites rien... C'est archi faux non ?
    Non, c'est ça. C'est étrangement dit mais c'est ça.

    Citation Envoyé par gizmo27 Voir le message
    hum... je ne saisis pas cette igne là ... c'est bizarre... on dirait l'implémentation d'un constructeur le QObject(parent) fait partie de la liste d'initialisation non ? Cette ligne me perturbe vraiment
    Pas besoin d'être perturbé, c'est bien un constructeur, qui prend 1 paramètre. Peut être que cette écriture te semblera plus familière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QFille::QFille(QObject* parent) 
        : QObject(parent) 
    {
    }
    Donc, c'est ce paramètre parent qui te pose problème ? Avec le message de koala01, ça te semble plus clair ?


    Ce qui me froisse encore : *parent n'est-il pas parent de fille ? Puisque de surcroît QFille hérite de QObject, donc les objets héritent eux aussi des objets parents non ?
    Ta phrase me laisse penser que tu confonds la définition d'une classe (le type, qui n'a pas d’existence réelle en mémoire) et l'instanciation d'une classe (l'objet créé en mémoire).
    L'héritage est un concept qui concerne la définition d'une classe. Quand on écrit que Fille hérite de QObject, cela veut dire que la définition de Fille "dérive" de celle de QObject (une "Fille" est un "QObject", tout comme un "chat" est un "animal")
    Le parent est un paramètre dans une fonction (un constructeur ici), c'est à dire un objet réel en mémoire (et non un type).

    Donc, au final, ton objet "fille" possède 2 "relations" différentes :
    - l'objet "fille" contient un pointeur vers un objet "QObject" (ou pas, ce n'est pas obligatoire, ça peut être un pointeur nul)
    - la définition de la classe "Fille" hérite de la définition de "QObject" (c'est obligatoire puisque ça fait partie de la définition de "Fille")

    Donc :
    Ce qui me froisse encore : *parent n'est-il pas parent de fille ?
    Non, l'objet "parent" est parent (au sens de Qt, pas de l'héritage) que s'il est passé en paramètre dans le constructeur (ou dans setParent)
    La question n'a pas de sens du point de vue de l'héritage puisqu'un objet (en mémoire) n'a pas de relation d'héritage avec un autre objet (ce sont les définitions des classes qui peuvent avoir une relation parent-enfant du point de vue héritage)

    Puisque de surcroît QFille hérite de QObject,
    Oui, c'est bien une relation d'héritage entre 2 définitions de classes

    donc les objets héritent eux aussi des objets parents non ?
    Non, toujours pas. L'héritage concerne les définitions des classes.

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

Discussions similaires

  1. suppression d'un pointeur sur un objet dans un vector
    Par Mindiell dans le forum SL & STL
    Réponses: 9
    Dernier message: 07/08/2008, 14h42
  2. [débutant] tester un pointeur sur un objet
    Par hogan dans le forum C++
    Réponses: 26
    Dernier message: 30/03/2007, 10h02
  3. utilisations de pointeurs sur des objets
    Par niarkyzator dans le forum Delphi
    Réponses: 21
    Dernier message: 13/12/2006, 09h42
  4. [Ada] Récupérer un pointeur sur un objet existant
    Par vincnet500 dans le forum Ada
    Réponses: 1
    Dernier message: 14/11/2004, 14h26
  5. vector de pointeurs sur des objet
    Par jean-bobby dans le forum SL & STL
    Réponses: 26
    Dernier message: 06/08/2004, 14h54

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