p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité régulier
    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 : 7
    Points
    7

    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 chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2012
    Messages : 411
    Points : 720
    Points
    720
    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 : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2009
    Messages : 90
    Points : 134
    Points
    134

    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
    Modérateur

    Homme Profil pro
    Network programmer
    Inscrit en
    juin 2010
    Messages
    2 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France

    Informations professionnelles :
    Activité : Network programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 2 685
    Points : 7 700
    Points
    7 700

    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
    }

Discussions similaires

  1. Héritage et redéfinition
    Par sheridan08 dans le forum Débuter
    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
    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