Académique Documents
Professionnel Documents
Culture Documents
Chapitre 4
Héritage
Plan
Notion d’Héritage
Classe dérivée
Héritage simple
Droits d’accès aux membres de la classe
Redéfinition de fonctions membres
Constructeurs, destructeurs
Amitié
Héritage multiple
Syntaxe
Conflits
Héritage virtuel
Peut être
Simple : Une seule classe de base
Multiple: Plusieurs classes de base
véhicule
de course fourgonnette
Exemple
class personne {
char nom[20];
char prenom[20];
int CIN;
public:
void saisir(char*,char*,int);
void afficher();
};
class etudiant : public personne {
int CNE;
public:
void saisir_cne(int);
void afficher_cne();
};
2011-2012 LST INFO, FSTF 8
Héritage simple
Droit d’accès aux membres de classe
Le droit d’accès aux membres d’une classe
peut être
Accordé au « grand public »
A partir de n’importe quel point du programme
Concerne l’Interface publique d’une classe
Mode de dérivation
Syntaxe de définition
public public
protected protected
private inaccessible
public protected
protected protected
private inaccessible
public private
protected private
private inaccessible
Exemple
Redéfinition surdéfinition
class B : public A {
int a;
public: B(){ a=10;};
void f(){
cout << "A::" << A::a;//affiche 0
cout << "B::" << a; // affiche 10
}
};
2011-2012 LST INFO, FSTF 24
Héritage simple
Constructeur/destructeur
Ordre d’appel
Lors de la déclaration d’un objet de la classe dérivée, le
constructeur de la classe de base est appelé avant celui
de la classe dérivée
Exemple
2011-2012 LST INFO, FSTF 25
Héritage simple
Constructeur de la classe de base
Syntaxe
class_derivee::class_derivee(param1,par
am2,…): base(parami,…)
{ … }
Exemple
2011-2012 LST INFO, FSTF 30
Héritage simple
Constructeurs : récapitulatif
Classe de base
Constructeur Constructeur sans Constructeur
par défaut paramètres avec paramètres
Appel implicite du Appel implicite du
Constructeur par constructeur par constructeur de la Erreur
défaut défaut classe de base Exemple
Classe dérivée
Exemple
Constructeur sans Appel implicite du Appel explicite du
paramètres constructeur par constructeur de la Erreur (sauf valeurs
défaut classe de base par défaut ou
Exemple improvisées)
Exemple
Constructeur avec Appel implicite du Appel implicite du Transmission des
paramètres constructeur par constructeur de la paramètres au
défaut classe de base constructeur de la
Exemple classe de base
Exemple
2011-2012 LST INFO, FSTF 31
Héritage simple
Constructeur de recopie
Deux cas :
La classe dérivée n’a pas de constructeur de
recopie
Exemple
La classe dérivée
Doit prendre en charge l’intégralité de la recopie de l’objet et
non seulement sa partie héritée
Exemple
Exemple
2011-2012 LST INFO, FSTF 35
Héritage simple
Opérateur d’affectation
L’opérateur ‘=‘ est surdéfini dans la classe
dérivée
Exemple
Point Complexe
Point_complexe
Exemple
A B
Exemple
2011-2012 LST INFO, FSTF 45
Héritage multiple
Conflits(2)
B C
D
Problème: Duplication des membres fonctions ou attributs
dans tous les objets de D
Syntaxe
class A {…}
// les descendants de B hériteront une seule fois
// les membres de A
class B : public virtual A {…}
class C : public virtual A {…}
class D : public B, public C {…}
Exemple
Exemple
Typage statique:
Le type de l’objet pointé est déterminé au moment
de la compilation
Exemple
Syntaxe
virtual type_retour nom_fonc(param)=0;
Exemple