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 :

Surcharge de fonction


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 52
    Points
    52
    Par défaut Surcharge de fonction
    Bonjour,

    Je débute en C++ et j'essaye de faire la surcharge suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void affichText(string);
    void affichText(string&);
    void affichText(string const&);
    Ai-je le droit de faire ça ? Si oui, comment je me débrouille à l'appel de la fonction pour appeler la fonction que je souhaite, sachant que j'ai dans ma fonction main la variable suivante :

    Merci d'avance, bonne journée.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Comment veux-tu que le compilateur sache quelle fonction appeler et quand?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void affichText(string);
    void affichText(string&);
    La seule solution est de rajouter un paramètre inutile qui permettra de différencier les fonctions (comme avec ++i et i++ en fait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void affichText(string, int);
    void affichText(string&);

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    Ok, du coup je vais éviter la surcharge pour ce genre de cas.

    Je comprends pas le rapport avec ++i et i++, tu peux m'éclairer ?

    Merci.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Les opérateurs ++ postfixe (i++) et préfixe (++i) ont normalement le même prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Fonction :
    Type & operator++(Type &);
     
    Méthode :
    Type & operator++();
    Alors pour les différencier, on a rajouté un paramètre à l'opérateur postfixe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //i++
    Fonction :
    Type & operator++(Type &, int);
     
    Méthode :
    Type & operator++(int);
     
    //++i
    Fonction :
    Type & operator++(Type &);
     
    Méthode :
    Type & operator++();
    EDIT : grillé par cob59^^

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Neckara Voir le message
    La seule solution est de rajouter un paramètre inutile qui permettra de différencier les fonctions
    Il y en a une autre, s'il utilise C++11 : la sémantique de mouvement.

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Je ne connaissais pas la sémantique de mouvement, mais j'ai du mal à comprendre une chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    maFonction(std::string && x)
    {
     
    } //(1)
    maFonction(std::string x)
    {
     
    } //(2)
     
    std::string x;
    maFonction(x);
    Quelle fonction sera alors appelée?
    Celle de sémantique de déplacement (1) ou celle de sémantique de copie (2)?

  8. #8
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    Ok, merci pour vos réponses. Intéressant pour le i++

    Edit : Je laisse répondre les autres pour ta question Neckara, comme je disais je débute et ça dépasse mes connaissances ^^

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Si tu veux la version "de mouvement", il faut appeler ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFonction(std::move(x));

Discussions similaires

  1. surcharge de fonction
    Par BigNic dans le forum C++
    Réponses: 2
    Dernier message: 21/03/2006, 18h57
  2. API HOOK, Dump dll, Surcharge de Fonction
    Par MicroAlexx dans le forum Windows
    Réponses: 2
    Dernier message: 30/12/2005, 10h39
  3. [MFC] Surcharger des fonctions de CView
    Par Philippe320 dans le forum MFC
    Réponses: 2
    Dernier message: 22/11/2005, 21h24
  4. singleton, polymorphisme, et surcharge de fonction
    Par legend666 dans le forum C++
    Réponses: 11
    Dernier message: 14/11/2005, 09h27
  5. Surcharge de fonction d'un edit dynamique
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/10/2003, 11h56

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