Skip to content

Latest commit

 

History

History
49 lines (38 loc) · 1.75 KB

File metadata and controls

49 lines (38 loc) · 1.75 KB

Héritage

  • L’héritage permet de décrire des classes de plus en plus précises, héritant de caractéristiques de classes plus générales La relation entre une classe mère et une classe fille est de type « est un »
class classeFille : public classeMere [, public classeMere2]
{
    //definition des spécificités de la classe fille
}
  • Nous nous limiterons à l’héritage public
  • Les membres publics et protégés dans la classe mère sont respectivement publics et protégés dans la classe fille
  • Les membres privés de la classe mère sont cachés (inaccessible) dans la classe fille
  • Le constructeur de la classe mère doit être appelé explicitement dans la liste d’initialisation du constructeur de la classe fille.
class Point{
    protected :
        double m_x , m_y ;
    public :
        Point (double x, double y);
        void setX (double x);   };

class Cercle : public Point{
    double m_rayon ;
    public :
        Cercle (double x, double y, double r );  };

Cercle::Cercle (double x, double y, double r): Point(x,y), rayon( r ){}

Cercle c(0 ,0 ,5); // cercle de centre (0 ,0) et de rayon 5
c. setX (7) ; // OK car setX est héritée de la classe mère Point
  • Une classe fille « est une » classe mère, donc il est possible de convertir une classe fille en une classe mère, en perdant alors les caractéristiques supplémentaires de la classe fille
Cercle unCercle (0 ,0 ,5); // cercle de centre (0 ,0) et de rayon 5
Point unPoint = unCercle ; // OK mais perd la valeur ajoutée du cercle
void affichePoint ( const Point & pt){ 
    cout << "(" << pt. getX () << "," << pt. getY () << ")";
}
affichePoint ( unCercle ); // OK car unCercle " est un" point

Exercice 7