Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/01/2013, 17h47   #1
ridazero
 
Homme
Développeur informatique
Inscription : janvier 2013
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2013
Messages : 12
Points : -1
Points : -1
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
ridazero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 18h16   #2
PilloBuenaGente
Membre éclairé
 
Homme
Caissier
Inscription : décembre 2012
Messages : 206
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Caissier

Informations forums :
Inscription : décembre 2012
Messages : 206
Points : 305
Points : 305
(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.
PilloBuenaGente est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 01/01/2013, 19h53   #3
zhouyu
Membre habitué
 
Avatar de zhouyu
 
Homme Loïc
Étudiant
Inscription : octobre 2009
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2009
Messages : 83
Points : 129
Points : 129
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 :
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.
zhouyu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 20h06   #4
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 551
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 551
Points : 4 102
Points : 4 102
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 :
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
}
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h03.


 
 
 
 
Partenaires

Hébergement Web