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 :

Difference entre polymorphisme et surcharge


Sujet :

C++

  1. #1
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut Difference entre polymorphisme et surcharge
    J'ai un peu de mal à voir la difference entre une fonction polmymorphe et une fonction surchargée.

    Soit f une fonction qui additionne 2 nombres a et b.

    L'exemple est bidon mais c'est juste un exemple!

    Dans ce cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int f(int a,int b){
    return a+b;
    }
     
    float f(float a,float b){
    return a+b;
    }
    on dit que f est surchargée;

    Et dans celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename T>
    T f(T a,T b){
    return a+b;
    }
    on dit que f est polymorphe?

    Est-ce cela ou je suis à côté de la plaque?

    Et ne peut on pas inverser les termes surchargée et polymorphe dans ces 2 exemples?

    Merci de m'éclairer!

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut Re: Difference entre polymorphisme et surcharge
    Citation Envoyé par seriousme
    Est-ce cela ou je suis à côté de la plaque?
    oui

    si personne n'intervient d'ici à ce que je sois sorti de table je t'éclairerais

  3. #3
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    A ce que j'ai entendu ce n'est pas forcément tout faux. Peut-être me trompe-je mais une fonction template peut aussi se dire "fonction polymorphe" dans le sens où elle accepte plusieurs formes elle aussi.

    Mais c'est vrai qu'on parle plus volontiers de templates (ou patrons) dans ce cas là et qu'on utilise souvent le mot "polymorphisme" pour parler des fonctions virtuelles et de l'héritage -> http://c.developpez.com/faq/cpp/?pag...NITION_virtual .

    Quelqu'un va peut-être me corriger ?

  4. #4
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Donc pour les templates on ne parle ni de l'un ni de l'autre?

    C'est un troisieme cas qu'on ne peut absolument pas associer aux deux autres?

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Le cas avec le template est du polymorphisme paramétrique, le cas avec plusieurs définitions c'est du polymorphisme ad-hoc (aussi connu sous le nom de surcharge).

    Quand on parle de polymorphisme en C++ on fait généralement référence au polymorphisme d'héritage.

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par Fiquet
    A ce que j'ai entendu ce n'est pas forcément tout faux. Peut-être me trompe-je mais une fonction template peut aussi se dire "fonction polymorphe" dans le sens où elle accepte plusieurs formes elle aussi.

    Mais c'est vrai qu'on parle plus volontiers de templates (ou patrons) dans ce cas là et qu'on utilise souvent le mot "polymorphisme" pour parler des fonctions virtuelles et de l'héritage -> http://c.developpez.com/faq/cpp/?pag...NITION_virtual .

    Quelqu'un va peut-être me corriger ?
    pareil

    le polymorphisme implique l'utilisation polymorphique d'une classe (par exemple un objet d'une classe B dérivée de A, utilisé au travers d'un pointeur A*). si une fonction virtuelle de A est redéfinie dans B alors c'est la fonction de B qui est appelée.

    la surchage d'une fonction dans le cas d'une classe B dérivée de A, c'est d'implémenter dans B une fonction de même signature qu'une fonction non virtuelle de A. dans ce cas la fonction héritée de A est masquée par celle de B. mais si on manipule un objet B au travers d'un pointeur A*, c'est la fonction de A qui sera appelée.

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Alors le polymorphisme ca n'est QUE dans le contexte des classes?

  8. #8
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    Souvent, quand on parle de polymorphisme en C++, on parle uniquement du type de polymorphisme des fonction virtuelles.

    Dans les domaines plus abstraits de l'informatique, on parle souvent de quatre types de polymorphisme.
    Deux où on utilise une structuration commune aux différents types en présence (polymorphismes universel):
    - Polymorphisme d'inclusion, basé sur de l'héritage
    - Polymorphisme paramétré, la base des templates
    Deux où le développeur spécifie manuellement le comportement pour chaque type (polymorphisme ad-hoc):
    - Surcharge de fonction
    - Coercion(cast des arguments)


    Lire par exemple http://research.microsoft.com/Users/luca/Papers/OnUnderstanding.A4.pdf

  9. #9
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    Non justement pas forcément. Ca avait été discuté il y a pas longtemps fait une recherche sur le forum.

    [edit]Quelques explications plus poussées ici : http://www.developpez.net/forums/viewtopic.php?t=457190 [/edit]

  10. #10
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    La surcharge est un cas de polymorphisme donc?

    EDIT: Les templates aussi?

    Je ne pensais pas que le polymorphisme était une notion si "globale".

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    seriousme, tu n'as pas lu ce que j'ai écrit plus haut ?
    Parce que bon tu as posé une question deux fois alors que je t'avais déjà donné la réponse.

  12. #12
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Si justement!

    Le polymorphisme regroupe à la fois les templates(polymorphisme dit paramétrique) et la surcharge(polymorphisme dit ad-hoc).

    C'est bien ce qu'il faut comprendre?

    Non?

    EDIT:si je pose plusieurs fois une question c'est que les avis semblent diverger.

    EDIT:j'essaie d'avoir des réponses catégoriques.

  13. #13
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Fiquet
    Non justement pas forcément.
    Ton "non" fait-il référence à mon message ou à celui de seriousme ?

    Parce que si c'est le mien, je ne vois rien dans le thread cité qui aille à l'encontre de mon message.

    HS : Ah, comme ça me manque la notion de thread hiérarchisé comme dans les newsgroups. Ca romps parfois le rythme de lecture, mais c'est moins ambigu...

  14. #14
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    Citation Envoyé par JolyLoic
    Ton "non" fait-il référence à mon message ou à celui de seriousme ?
    A celui de seriousme. Comme je l'ai dit avant, je suis aussi d'accord sur le fait que la mention "polymorphisme" en C++ est souvent utilisé dans le cas des fonctions virtuelles .

  15. #15
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Le polymorphisme regroupe à la fois les templates(polymorphisme dit paramétrique) et la surcharge(polymorphisme dit ad-hoc).
    Oui.
    Il y a aussi le polymorphisme d'inclusion (que j'ai appelé polymorphisme d'héritage - je suis pas sûr du terme) qui est celui auquel on pense en C++ quand on dit polymorphisme tout court.

    HS : Ah, comme ça me manque la notion de thread hiérarchisé comme dans les newsgroups. Ca romps parfois le rythme de lecture, mais c'est moins ambigu...
    Comment ça "ça te manque" ? Tu n'as plus accès aux newsgroups ?

  16. #16
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    <HS>Si, mais il faut avouer que ce site rassemble plus de traffic que les newsgroups, et particulièrement des débutants, ce qui fait que je participe, même si en mon for intérieur, par moment je regrette l'ergonomie des newsgroups</HS>

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

Discussions similaires

  1. POO : difference entre heritage et polymorphisme
    Par Melvine dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 13/07/2009, 19h14
  2. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  3. Difference entre fenetre et boite de dialog
    Par billyboy dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2003, 15h43
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

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