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 :

A quoi sert la surcharge de fonction en C++ ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de viper1094
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 570
    Par défaut A quoi sert la surcharge de fonction en C++ ?
    Bonjour à tous ceux qui passent par là,
    Alors voilà, j'apprend le C++, et une question me vient à l'esprit. J'apprend qu'il est possible de surcharger des fonctions en C++. Sauf que, même en me creusant la tête, je vois pas dans quel cas ça peut servir. Alors voilà, j'viens poser ma petite question ici.
    Merci d'avance à ceux qui répondront

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ca te servira le jour où tu auras un cas concret où tu te dis : "tiens ! il me faut la même fonction mais avec des paramètres différents..."

    Exemple avec un constructeur pour créer une couleur ARGB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Color_ARGB {
    public:
        Color_ARGB();
        Color_ARGB(std::uint8_t red, std::uint8_t green, std::uint8_t blue);
        Color_ARGB(std::uint32_t color);
    private:
        // ...
    };
    Le premier crée une couleur par défaut (du blanc ou du noir), le second prend les 3 composants RGB et utilise une valeur par défaut pour l'alpha, le 3e prend un 32 bits duquel il va extraire 4 composantes. On pourrait en imaginer un 4e avec 4 composantes séparées en 4 std::uint8_t.

    Imagine ensuite que tu as des classes Color_RGB ou encore Color_HSV qui sont d'autres manières de représenter des couleurs.

    Enfin tu as une classe Foo que tu peux colorer. Foo pourrait avoir différentes surcharges de setColor() pour accepter différents formats de couleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Foo {
    public:
        void setColor(Color_ARGB);
        void setColor(Color_RGB);
        void setColor(Color_HSB);
    };

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Ça sert surtout à ne plus avoir à créer des fonctions processType1, processType2, processType3, ... que tu vois beaucoup en C où la surcharge n'existe pas alors qu'une fonction process qui prend plusieurs types est bien plus logique et simple.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre très actif Avatar de viper1094
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 570
    Par défaut
    Alors déja merci pour vos deux réponses qui sont très clair (et ton exemple est très sympa @Bktero), mais du coup, en quoi un truc équivalent avec des if else ne suffirait pas ? (Je suppose bien que y a une raison ( performance, clarté du code, ou autre), mais je la connais pas donc je demande)

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Comment tu feras avec des if / else pour mon exemple des constructeurs de ARGB ou les Foo::setColor ?

    "Logique" dans le message de Bousk étant dans le sens de "sémantique" pas et d'"algorithmie". Il ne faut pas voir la surcharge comme résolvant des problèmes d'algorithmie mais comme une façon de simplifier visuellement un code.

    Pour reprendre la classe Foo, ça serait moins élégant d'avoir le code suivant non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Foo {
    public:
        void setColorUsingARGB(Color_ARGB);
        void setColorUsingRBG(Color_RGB);
        void setColorUsingHSB(Color_HSB);
    };

  6. #6
    Membre très actif Avatar de viper1094
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 570
    Par défaut
    Moins élégant sûrement, mais dans le fond c'est plus un détail, un p'tit bonus que quelque chose de réellement utile non ? (Question non réthorique)

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

Discussions similaires

  1. A quoi sert un pointeur sur fonction ?
    Par HRS dans le forum C
    Réponses: 2
    Dernier message: 19/03/2014, 18h31
  2. [CognosScript] A quoi sert cette fonction ?
    Par ben_harper dans le forum Cognos
    Réponses: 2
    Dernier message: 23/06/2009, 11h12
  3. Réponses: 0
    Dernier message: 21/10/2008, 15h42
  4. A quoi sert cette fonction
    Par soumia1988 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/03/2007, 13h03
  5. A quoi sert la fonction syscall ??
    Par red210 dans le forum Langage
    Réponses: 1
    Dernier message: 29/03/2006, 22h06

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