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 :

Héritage cpp redéfinition


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 40
    Points
    40
    Par défaut Héritage cpp redéfinition
    Lorsqu' une fonction membre est définie dans une classe, elle masque toutes les
    fonctions membres de même nom de la classe de base (et des classes ascendantes).
    Autrement dit, la recherche d’une fonction (surdéfinie ou non) se fait dans une
    seule portée, soit celle de la classe concernée, soit celle de la classe de base (ou
    d’une classe ascendante), mais jamais dans plusieurs classes à la fois.


    j'ai pas compris la phrase souligner

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    (bonsoir)
    Une classe de base se nommant animal, parent de chien, chat...contenant un prénom.
    Si tu veux récupérer le prénom, soit :
    ou :
    Mais tu n'auras jamais les deux en même temps car elles renvoient à la même fonction.

  3. #3
    Membre habitué Avatar de zhouyu
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Points : 143
    Points
    143
    Par défaut
    Salut.
    Ce qu'il explique c'est que tu n'as accès qu'a une instance de ta méthode en fonction de la classe que tu utilises.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
        public class A
        {
            public void affiche()
            {
                printf("A \n");
            }
        }
     
        public class B : A
        {
            public void affiche()
            {
                printf("B  \n");
            }
        }
     
        public class C : B
        {
        }
     
        public class D : C
        {
            public void affiche()
            {
                C::affiche();//pas sur de la syntaxe
                printf("D  \n");
            }
        }
    Une méthode affiche est défini dans la classe mère A.
    Dans B on la redéfinit ce qui fait qu'on a plus accès à la méthode affiche de base.
    Dans C on n'y touche pas, donc à l'appelle de la méthode affiche, il regarde dans C, rien, il remonte dans l'arbre d'héritage, une méthode affiche est défini dans B, il appelle cette version de affiche.
    Dans D, on veut garder le comportement du parent mais rajouter quelque chose, donc dans la redéfinition j'appelle la version du parent et je rajoute mes modifications.

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Quand tu manipules un objet il faut distinguer 2 choses
    - son type statique
    - son type dynamique
    Ils peuvent être différents quand on manipule un pointeur ou référence, ils sont identiques sinon.
    Avec la virtualité et le typage dynamique on crée des interfaces et on fait ce qu'on apelle polymorphisme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    struct A { void Do() { std::cout<<"je suis A"<<std::endl; } virtual void Do2() { std::cout<<"je suis A::Do2"<<std::endl; } };
    struct B : A {};
    struct C : A { void Do() { std::cout<<"je suis C"<<std::endl; } virtual void Do2() { std::cout<<"je suis C::Do2"<<std::endl; } };
    struct D : C { void Do() { std::cout<<"je suis D et "<<C::Do(); } virtual void Do2() { std::cout<<"je suis D::Do2 et"<<C::Do2(); } };
     
    int main() {
    A a;
    B b;
    C c;
    D d;
    a.Do(); // je suis A
    a.Do2(); // je suis A::Do2
    b.Do(); // je suis A
    b.Do2(); // je suis A::Do2
    c.Do(); // je suis C
    c.Do2(); // je suis C::Do2
    d.Do(); // je suis D et je suis C
    d.Do2(); // je suis D::Do2 et je suis C::Do2
    A* ptrA = &a;
    ptrA->Do(); // je suis A
    ptrA->Do2(); // je suis A::Do2
    ptrA = &b;
    ptrA->Do(); // je suis A
    ptrA->Do2(); // je suis A::Do2
    ptrA = &c;
    ptrA->Do(); // je suis A
    ptrA->Do2(); // je suis C::Do2
    A& refA = d;
    refA.Do(); // je suis A
    refA.Do2(); // je suis D::Do2 et je suis C::Do2
    A aD = d;
    aD.Do(); // je suis A
    aD.Do2(); // je suis A::Do2
    }
    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.

Discussions similaires

  1. Héritage et redéfinition
    Par sheridan08 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 20/08/2012, 21h00
  2. Héritage et redéfinition de méthode
    Par bomehc dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 29/06/2012, 16h23
  3. Héritage et redéfinition de fonctions
    Par elbourin dans le forum C++
    Réponses: 3
    Dernier message: 20/12/2010, 22h02
  4. [POO] Héritage et redéfinition
    Par mamid1706 dans le forum C++
    Réponses: 6
    Dernier message: 07/05/2007, 17h25
  5. héritage et redéfinition de méthodes
    Par Braillane dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2007, 18h47

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