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 :

[FAQ] initialisateur, appel de m�thodes


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv� Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Par d�faut [FAQ] initialisateur, appel de m�thodes
    Bonjour � toutes et � tous,
    je m'interroge sur cette phrase trouv�e dans la FAQ
    http://c.developpez.com/faq/cpp/?pag..._utiliser_this

    Citation Envoy� par Marshall Cline
    Voil� quelque chose qui ne fonctionne jamais : le (corps du) constructeur (ou une fonction appel�e par lui) ne peut pas descendre dans une classe d�riv�e en appelant une m�thode virtual qui est red�finie dans une classe d�riv�e. Si votre but �tait d'ex�cuter le code de la fonction virtuelle, �a ne fonctionnera pas.
    J'ai l'impression qu'il n'est possible de faire l'op�ration d�crite qu'avec une utilsation de downcasting. Pourtant cela n'est pas indiqu� par l'auteur, donc je me dis que je ne comprends pas tout. Qu'en est-il exactement ?
    Je vous remercie par avance de m'�clairer.

  2. #2
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Ben la virtualit� c'est plus ou moins ce que tu entends par downcasting non ?
    Il veut dire que si tu tentes d'appeler une m�thode virtuelle de la classe d�riv�e dans ton constructeur �a marchera pas.

  3. #3
    Membre �prouv� Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Par d�faut
    Merci c'est bien ce qui me semblait.
    Et je trouve surprenant que des gens puissent faire appel � une m�thode de la classe d�riv�e quand ils cr�ent lune instance de la classe de base.

  4. #4
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Bin, �a peut arriver assez naturellement : Par exemple, imagine la hi�rarchie bateau d'une classe Forme avec des d�riv�es Rond et Rectangle.

    Si on veut qu'apr�s chaque changement de taille, on affiche la forme, la m�thode classique consiste � appeler la fonction virtuelle Forme::affiche() directement dans le code de la fonction Forme::resize(), avec appel dynamique (Rond::affiche() sera appel�, par exemple).

    De m�me fa�on, si on veut qu'une forme soit affich�e en permanence � l'�cran, il peut sembler assez naturel de mettre un appel � affiche() dans le constructeur, et comme on veut v�rifier �a pour n'importe quelle forme, on souhaites mettre cet appel directement dans le constructeur de la classe de Base, Forme. Et l�, c'est la fonction Forme::affiche (et jamais Rond::affiche) qui sera appel�e. Et si en plus d'�tre virtuelle, Forme::affiche est pure, boom.

    Certains ont propos� de d�finir deux constructeurs : Un comme celui actuel, et un autre nomm� post-constructeur. La s�quence d'appel automatique � la cr�ation d'un objet serait alors :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct A{};
    struct B:A{};
    struct C:B{};
     
    C c;
    =>
     A::A() // Type dynamique == A
     B::B() // Type dynamique == B
     C::C() // Type dynamique == C
     A::post-A() // Type dynamique == C
     B::post-B() // Type dynamique == C
     C::post-C() // Type dynamique == C
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  5. #5
    Membre �prouv� Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Par d�faut
    j'ai un petit doute du coup
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    class B : public A {}
    A *a=new B;
    Dans ce bout de code on ne fait pas appel au constructeur de A sauf dans B.

    ce qui ne marche pas serait en fait

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class A {
    virtual void affiche();
    A() {
    affiche();
     }
    };
     
    class B : public A {
    //redéfinition de affiche
    }
     
    B b; // pas ce qu'on veut car appel du constructeur A et donc utilisation de A::affiche()
    en fait il me manquait bien quelque chose, car je ne voyais qu'un dynamic_cast pour arriver � une telle situation (celle �voqu�e dans la FAQ)

  6. #6
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Je crois que tu as compris.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Appeler une m�thode dynamiquement
    Par doof dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 03/01/2005, 23h15
  2. Comment l'appel � une m�thode virtuelle....
    Par Blobette dans le forum C++
    R�ponses: 7
    Dernier message: 07/12/2004, 13h55
  3. appel entre m�thodes de meme classe
    Par frmaniako dans le forum C++
    R�ponses: 8
    Dernier message: 10/09/2004, 22h55
  4. [D�butant] [JSP] Appel de m�thode
    Par Crazyblinkgirl dans le forum Servlets/JSP
    R�ponses: 10
    Dernier message: 10/09/2004, 11h10
  5. [D�butant] H�ritage & appel de m�thodes
    Par KooX dans le forum Langage
    R�ponses: 4
    Dernier message: 11/05/2004, 23h37

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