Previous Next Contents




Dérivation / Héritage : sommaire


Héritage  1


Héritage

Objectifs de la programmation par objets : --> Classes, Héritage







Héritage  2


Définition et rôle


Héritage  3


Classe dérivée


Héritage  4


Dérivation

class nom : á liste_de_dérivation ñ
   {
   // ...
   };


Héritage  5


Dérivation : exemple (1)

class figure {
protected :
   Point position ;
public :
   void translater(const int, const int) ;
   void afficher(void) const ;
   // ...
} ;
class rectangle : public figure {
   // Ajout d'attributs
   int largeur, hauteur;
public :
   // constructeur de rectangle
   rectangle(int i=0, int j=0) :
    largeur(i), hauteur(j) {}
   // ajout de méthode
   int diagonale(void) const ;
   // redéfinition de méthode
   void afficher(void) const ;
   // translater() n'est pas redéfinie
   // ...
} ;

Héritage  6


Dérivation : exemple (2)






membres position
hérités de figure translater(const int, const int)
  figure::afficher()
  largeur
membres spécifiques hauteur
à rectangle diagonale()
  afficher()

 
rectangle rect(5,10);
// appel ``afficher'' de la classe ``rectangle''
rect.afficher();
// appel ``afficher'' de la classe ``figure''
rect.figure::afficher();
rect.translater();


Héritage  7




Dérivation et droits d'accès

class Base {
private:
// membres privés
protected:
// membres protégés
public:
// membres publics
};


Héritage  8




Accès aux membres (1)

Soit une classe Deriv dérivée-de Base.


Héritage  9




Redéfinition des membres (1)

Soit une classe Deriv dérivée-de Base.

MAIS, il faut savoir que :


Héritage  10




Redéfinition des membres : exemple (1)

class Auto {
public:
   Auto(int x) : poids(x) {}
   void setpoids(int x) { poids=x; }
   int getpoids(void) { return poids; }
   // ...
private:
   int poids;
   // ...
};
class Camion : public Auto {
private:
   int remorque; // poids de la remorque
   // ...
public:
   Camion(int x, int y) : Auto(x), remorque(y) {}
   void setpoids(int, int);
   int getpoids(void);
   // ...
};


Héritage  11




Redéfinition des membres : exemple (2)

void Camion::setpoids(int x, int y) {
   // setpoids masque setpoids de Auto
   // Accès à setpoids de Auto par :
   Auto::setpoids(x);
   remorque = y;
}
int Camion::getpoids(void) {
   // Accès à getpoids de Auto
   return Auto::getpoids()+remorque;
}


Héritage  12




Types de dérivation (1)

--> Rappel : quel que soit le type de dérivation, les membres privés de Base ne sont pas accessibles dans Deriv.


Héritage  13




Types de dérivation (2)

Principes de dérivations :


Héritage  14




Types de dérivation (3)

Exemptions individuelles :


Héritage  15




Dérivation et conversion (1)


Héritage  16


Dérivation et conversion (2)

// class Camion : public Auto { } ;
Auto a(900);
Camion c(1200,130);
a = c; // ok
   // si pas d'opérateur de conversion
   // d'une classe de base en une classe
    dérivée : Camion(Auto&)
c = a; // erreur
// conversion implicite
Auto *aptr = &c;
cout << aptr->getpoids(); // Auto::getpoids
// conversion explicite
Camion *cptr = (Camion *) aptr;
cout << cptr->getpoids(); // Camion::getpoids


Héritage  17




Dérivation et constructeurs


Héritage  18




Dérivation et destructeurs


Héritage  19




Dérivation et opérateurs


Héritage  20




Dérivation et amitié

Soit une classe Deriv dérivée-de Base.


Héritage  21




Héritage multiple

Cas où une classe dérive de plusieurs classes de base.

Héritage  22




Classe de base virtuelle (1)

class Deriv1 : public Base {...}; ,
class Deriv2 : public Base {...};
class Fille :public Deriv1,public Deriv2 {...};

Þ Fille contient 2 fois les membres de Base

Deux solutions :

Héritage  23




Classe de base virtuelle (2)

Précisions sur l'héritage virtuel :


Previous Next Contents