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 :

Les 4 types de polymorphismes existants


Sujet :

C++

  1. #1
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut Les 4 types de polymorphismes existants
    Bonjour,

    J'ai étudié les différents types de polymorphisme grâce à la FAQ C++.
    Je souhaiterais avoir votre confirmation sur ma compréhension du sujet et vous poser quelques questions supplémentaires.
    Si je dis des bêtises, n'hésitez surtout pas à me le signaler

    Il existe 4 types de polymorphismes.

    Ad-hoc :
    • coercition
    • surcharge


    Universel :
    • paramétrique
    • inclusion


    Polymorphisme de coercition (conversion implicite des variables) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int valInt = 2;
    double valDouble = 2.2;
    double resultat = valInt + valDouble; // Conversion implicite de valInt en double.
    Polymorphisme de surcharge (surcharge des fonctions/méthodes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void maFonction(int arg);
    int maFonction(double arg);
    char maFonction(char arg, char arg2);
    Polymorphisme paramétrique :
    "utilisation des techniques génériques pour offrir un même service pour tout un ensemble de types"
    Utilisation de template et flux de sortie ?

    Polymorphisme d'inclusion (héritage des méthodes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Mere{
    public:
        void methodeMere(); // La méthode sera héritée dans la classe Fille
    };
     
    class Fille : public Mere{
     
    };

    Mes questions :
    1. Je n'ai pas très bien compris le polymorphisme paramétrique, pouvez-vous m'en dire un petit peu plus sur ce type de polymorphisme ?
    2. A quel type de polymorphisme appartient le code suivant ? Par élimination je me dis qu'il s'agit du polymorphisme d'inclusion mais pourquoi ?
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      ClasseFille f;
      ClasseMere &obj = f;
    3. Aussi il y a une autre chose que je ne comprend pas, pourquoi "le polymorphisme d'inclusion s'appuie sur l'héritage public" ? Pourquoi public et pas protected par exemple ?
      Source ici.


    Merci pour vos lumières
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  2. #2
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    1. Oui, template. Il doit y avoir des choses dessus, sur la FAQ.

    2. Polymorphisme d'inclusion, avec un poil de coercion : on exploite la conversion implicite d'une référence sur une classe fille vers une référence sur une classe mère.

    3. Parce que la conversion implicite de référence / pointeur et le "downcast" automatique pour les fonctions virtuelles ne fonctionnent qu'avec l'héritage public.

    Mes réponses suffisent-elles ?

  3. #3
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Pour ta première question, un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template <class T>
    void maFonction(T arg);
     
    // Appel
    double a = 0;
    int b = 0;
    // Appel de la même fonction ! Pas de redondance du code.
    maFonction(a);
    maFonction(b);
    Tu utilises donc les templates lorsqu'une fonction à un même comportement peu importe le type du paramètre (dans une certaine mesure), il faut bien entendu que le type du paramètre soit compatible. Par contre, lorsque la fonction a un comportement qui dépend du type, alors tu fais une surcharge.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/04/2010, 12h29
  2. Les types des programes existants
    Par chebmo1986 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 25/03/2009, 09h29
  3. Réponses: 5
    Dernier message: 11/09/2006, 17h29
  4. Réponses: 3
    Dernier message: 13/07/2004, 10h48
  5. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26

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