Professional Documents
Culture Documents
Mohamed EL ANSARI
Faculté des Sciences, Agadir
Objectifs du cours
Enrichissement
Spécialisation
Classe
Héritage
Figure Géométrique
Partitionnement hérite de
Rectangle Cercle
Sphère Cylindre
Classe Point
Abscisse
Ordonnee
Hérite de
Classe Pixel
Couleur
class Rectangle
{
public:
Rectangle(): largeur(1.0), hauteur(2.0) {}
protected:
double largeur; double hauteur;
};
class RectangleColore : public Rectangle
{
public:
...
void carre() { largeur = hauteur; }
protected:
Couleur couleur;
};
Accès initial
public protected private
public public protected Pas d’accès
Héritage protected protected protected Pas d’accès
private private private Pas d’accès
Exemple :
Rectangle3D hérite de Rectangle
2* (largeur*hauteur) + 2*(largeur*profondeur)+
2*(hauteur*profondeur)
calcul de la surface pour tous les autres Rectangle :
(largeur*hauteur)
Faut-il re-concevoir toute la hiérarchie ?
Non, on ajoute simplement une méthode surface spéciale à
Rectangle3D
Pr. Med El Ansari, Faculté des Sciences,
13/02/2009 Agadir 17
Masquage dans une hiérarchie (2)
Rectangle
……..
double surface(){return largeur*hauteur;}
Rectangle3D : Rectangle
……..
double surface(){return 2* (largeur*hauteur) +
2*(largeur*profondeur)+ 2*(hauteur*profondeur);}
1. Objet non-Rectangle3D :
Méthode générale (surface de Rectangle)
2. Objet Rectangle3D :
Méthode spécialisée (surface de Rectangle3D)
MAIS...
...il ne doit pas être à la charge du concepteur des sous-classes
de réaliser lui-même l'initialisation des attributs hérités
L'accès à ces attributs peut notamment être interdit !
L'initialisation des attributs hérités doit donc se faire au niveau
des classes où ils sont explicitement définis.
Solution : l'initialisation des attributs hérités doit se faire en
invoquant les constructeurs des super-classes.
Exemple :
class Rectangle {
protected: double largeur; double hauteur;
public:
Rectangle(double l, double h) : largeur(l), hauteur(h)
{}
// le reste de la classe...
};
class Rectangle3D : public Rectangle {
protected: double profondeur;
public:
Rectangle3D(double l, double h, double p)
: Rectangle(l,h), profondeur(p){}
// le reste de la classe...
};