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 :

appel de fonction const


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12
    Par défaut appel de fonction const
    Bonjour,
    Je desire savoir comment appeler explicitement une fonction const sans caster l'object lui meme...
    Je me doute que c est pas tres clair comme ca, donc voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class C {
    public:
    void f() const;
    void f();
    }
    si je declare:
    C c;

    alors c.f() fait appel à la seconde, logique!!!
    Le seul moyen que je connais pour faire appel a la seconde est:
    ((const C) c).f();
    mais ca ne me plait pas trop.....

    donc si qqun sait comment faire appel a la methode const sans caster l objet je suis preneur.

    Merci d'avance.


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const C cc;
    cc.f(); // la seconde
     
    C cv;
    cv.f(); // 1
    const C & rcc = cv;
    rcc.f(); // 2
    const_cast<const C*>(&cv)->f(); // 2
    NB: const_cast<> est le seul cast correct en C++ pour lever/ajouter les const.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12
    Par défaut
    je ne comprends pas bien la différence entre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const C & rcc = cv; 
     rcc.f(); // 2
    et:
    ((const C&)cv).f();
    Sinon merci pour ta solution, certes un peu longue mais bon!!!!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12
    Par défaut
    Desole, j ai oublie un truc...
    le but en fait etait de faire appel explicitement a une methode const et non de modifier le type de l objet applant !
    Le probleme c est que dans la signature je n arrive pas a faire la difference entre les deux.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Je déclare une référence constante sur un objet. Seule alors les fonctions membre qui déclarent ne pas modifier les objets sur lesquels elles s'appliquent, peuvent être appelées sur la référence constante.

    Tu const-castes très salement (c'est const_cast<> qui doit être utilisé pour ce genre de choses et rien d'autre !!) pour t'assurer d'appeler la bonne fonction membre.

    Il n'y a pas d'autre façon ("directe") de procéder.

    Le type de l'objet initial sur lequel est appliquée la fonction membre n'est jamais modifié. Par contre on est obligé de se donner un objet de type "const C" si on veut appeler les fonctions const et uniquement elles. Dans toutes les façons présentées, on ne fait que faire semblant qu'un tel objet existe, soit avec des alias, soit avec const_cast<>.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12
    Par défaut
    Encore merci,

    je ne connais pas du tout cette syntaxe...Si tu pouvais m'envoyer un pointeur ou qqch que je puisse me documenter ca serait sympa.

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

Discussions similaires

  1. preferer les appels aux fonctions const
    Par yan dans le forum C++
    Réponses: 12
    Dernier message: 29/08/2008, 10h15
  2. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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