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 :

réimplementer une methode virtuelle


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut réimplementer une methode virtuelle
    Bonjour,
    je réimplemente une methode virtuelle dans une classe fille,
    la methode mere :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    QWidget *
      SoQtExaminerViewer:: buildBottomTrim(QWidget * parent)
      {
         QWidget * w = new QWidget(parent);
      w->setFixedHeight(20);
     
      QLabel * label = new QLabel(this->leftWheelStr, w);
      label->adjustSize();
      label->setAlignment(Qt::AlignLeft | Qt::AlignTop);
      label->setMargin(2);
      this->leftWheelLabel = label;
     
      label = new QLabel(this->bottomWheelStr, w);
      label->adjustSize();
      label->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
      label->setMargin(2);
      this->bottomWheelLabel = label;
     
      label = new QLabel(this->rightWheelStr, w);
      label->adjustSize();
      label->setAlignment(Qt::AlignRight | Qt::AlignTop);
      label->setMargin(2);
      this->rightWheelLabel = label;
     
      SoQtThumbWheel * t = new SoQtThumbWheel(SoQtThumbWheel::Horizontal, w);
      this->bottomWheel = t;
      t->setRangeBoundaryHandling(SoQtThumbWheel::ACCUMULATE);
     
     
     QObject::connect(t, SIGNAL(wheelMoved(float)),
                       PRIVATE(this), SLOT(bottomWheelChanged(float)));
    QObject::connect(t, SIGNAL(wheelPressed()),
                       PRIVATE(this), SLOT(bottomWheelPressed()));
    QObject::connect(t, SIGNAL(wheelReleased()),
                       PRIVATE(this), SLOT(bottomWheelReleased())); 
     
     this->bottomWheelVal = t->value();
     
      QGridLayout * gl = new QGridLayout();
      gl->setColStretch(0, 0);
      gl->setColStretch(1, 0);
      gl->setColStretch(2, 0);
      gl->setColStretch(3, 1);
      gl->setColStretch(4, 0);
     
      gl->addWidget(this->leftWheelLabel, 0, 0, Qt::AlignVCenter | Qt::AlignHCenter);
      gl->addWidget(this->bottomWheelLabel, 0, 1, Qt::AlignVCenter | Qt::AlignRight);
      gl->addWidget(t, 0, 2, Qt::AlignVCenter | Qt::AlignLeft);
      gl->addWidget(this->rightWheelLabel, 0, 4, Qt::AlignVCenter | Qt::AlignRight);
     
      gl->activate()
     
      return w;
      }
    dans la methode de la classe fille qui herite de la premiere j'ai juste changé le "height" du widget:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QWidget *
      MyExaminerViewer:: buildBottomTrim(QWidget * parent)
      {
         QWidget * w = new QWidget(parent);
      w->setFixedHeight(130);
    
      }
    ce que je voudrai savoir est : est ce que les différentes autres fonctionalités de la methode qui existe dans la classe mere seront pris en compte ou je dois reimplementer le tout ?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    L'héritage public te fais bénéficier des méthodes des classes de base dès lors que tu ne les spécialises pas. Donc si tu n'as pas besoin de les spécialiser, tu n'es pas obligé de le faire.

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Halloula Voir le message
    ce que je voudrai savoir est : est ce que les différentes autres fonctionalités de la methode qui existe dans la classe mere seront pris en compte ou je dois reimplementer le tout ?
    Si j'ai bien compris ce que tu veux, tu peux appeler explicitement la fonction que tu supplantes,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QWidget *
      MyExaminerViewer:: buildBottomTrim(QWidget * parent)
      {
         QWidget * w =SoQtExaminerViewer::buildBottomTrim(parent);
         w->setFixedHeight(130);[/B]
         return w;
      }
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    je vais réexpliquer mon problem plus exactement :
    j'ai une classe A qui a une methode protected virtual BuildRightTrim() qui presente differents fonctionalités dont : et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QLabel * label = new QLabel(this->leftWheelStr, w);
    puisque cette fonction est virtuale,je ne peux changer sa fonctionalité qu'en heritant de la classe A,une classe B qui implemente la methode BuildRightTrim()
    mais avec cette fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     w->setFixedHeight(130) //130 le height aulieu de 20
    ma question est,est ce que je suis obligée d'implementer le QLabel aussi,ou il sera pris en compte et crée puisque finalement B herite de A ?

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Salut,
    Si tu utilises la solution de Jean Marc, ca devrait fonctionner, puisque tu appelles la fonction de la classe Mère (qui fait setFixedHeight et new QLabel ), puis tu changes la fixedHeight :
    tu auras donc le QLabel alloué et la hauteur fixée à la valeur que tu souhaites.

    Je ne suis pas sûr d'être très clair, donc voici le code en gros :
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    A::BuildRightTrim()
    {
          w->setFixedHeight(20);    
          QLabel * label = new QLabel(this->leftWheelStr, w);
    }

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    B::BuildRightTrim()
    {
         A::BuildRightTrim();    // appel de la fonction de la classe Mère
         w-> setFixedHeight(130);   // changement de la valeur de Height
    }

    Cela répond il à ta question ?

Discussions similaires

  1. comment templatiser une methode virtuelle?
    Par Hypnocrate dans le forum C++
    Réponses: 6
    Dernier message: 13/03/2009, 16h28
  2. Réponses: 2
    Dernier message: 12/07/2007, 10h12
  3. Création d'une imprimante virtuelle
    Par pilpagouna dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/06/2004, 13h38
  4. [MFC] Passage d'une structure dans une method
    Par KPitN dans le forum MFC
    Réponses: 5
    Dernier message: 18/06/2004, 10h11
  5. [Reflection][Bean] Appel d'une méthode dynamiquement
    Par eraim dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 28/04/2004, 11h07

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