Académique Documents
Professionnel Documents
Culture Documents
A l'origine
Impératif de réutiliser les portions de code
déjà écrites dans les classes utilisées pour
des projets antérieurs (comme cela se fait
dans les modules en C).
Pourquoi?
recopier est peu valorisant
recopier est coûteux en développement (écriture,
mise au point, tests)
recopier est coûteux en maintenance
(multiplication des erreurs)
HERITAGE
L'idée
Organiser ses propres classes en réutilisant
les classes existantes (les siennes ou celles
des autres (bibliothèques,…))
Une classe dérivée hérite de (récupère)
toutes les données membre et toutes les
fonctions membre de la classe de base
HERITAGE
L'idée (suite)
Une classe dérivée peut
accéder aux données membre et fonctions
membre de sa classe de base selon certaines
règles
(accès si public ou protected)
ajouter des données membre et fonctions
membre à sa classe de base
redéfinir* certaines fonctions membre de sa
classe de base
(*) définir des fonctions aux en-têtes identiques, à savoir noms identiques et
paramètres identiques. Différent de la surdéfinition ou surcharge!
HERITAGE
Le Principe
L'héritage simple structure un ensemble de
classes en une hiérarchie.
Au sommet, on trouve la classe
correspondant au concept le plus général.
Du sommet vers la base, on spécialise en
cas de plus en plus particuliers.
La relation d'héritage:
est_un
possède les caractéristiques de
HERITAGE
Le principe (suite)
Véhicule
Véhicule
Héritage multiple :
Exemple
class D
{public :
D(int,int) ;
};
class E : public D // E dérivée de D
{public :
E(int,int,int) ;
};
// initialisation de la classe de base
E::E(int x,int y,int z) : D(x,y)
{
}
HERITAGE
Constructeurs
CAS 1 : Cas où le constructeur de la classe dérivée est synthétisé par le
compilateur (sans paramètres) : ce constructeur appelle le constructeur par
défaut de la classe de base (appel sans argument du constructeur synthétisé
ou d'un constructeur défini sans paramètres ou dont tous les paramètres ont
une valeur par défaut)
class A class A
class A { {
{ private: private:
private: public: public:
public: A(); A(T1 a1, T2 a2);
}; }; };
class B : public A
{
private:
public:
B(T1 b1, T2 b2, T3 b3);
};