Exood4 Studio - Video Game Development, Toulouse (France)
Exood4 Studios Exood4 Tutorials

   
L a n g a g e   C++

L ' h r i t a g e   s i m p l e






Introduction


 L'hritage consiste driver une classe partir d'une autre classe de base.




 On dit que la classe B hrite de la classe A, ou B est une classe fille de la classe A, ou encore A est une classe parente de la classe B etc...

 Toute classe B, hritant d'une classe A, accde l'ensemble des dclarations de A sous certaines conditions :

public : accessible par tout le monde (membres de la classe, classes drives et clients de la classe)

protected : accessible par les membres de la classe et par les classes drives

private : accessible par les membres de la classe uniquement


Classe drives publiques


 La spcification d'une classe B hritant de A s'crira :

class B : public A
{
 ...
};


Exemple :

// Dclaration de la classe point
class point
{
private :
 float abscisse, ordonnee;

public :
 void point (float, float);
 void afficher();
};

// Dclaration de la classe dpoint hritant de la classe point
class dpoint : public point
{
public :
 void deplacer (float, float);
}

 Implmentation :

#include "point.h"
#include "dpoint.h"

// Dfinition de la mthode deplacer de la classe dpoint
void dpoint::deplacer (float x, float y)
{
 abscisse = abscisse + x;
 ordonnee = ordonnee + y;
}

 Les attributs abscisse et ordonnee sont dclars dans la partie prive de la classe point. Pour les rendre accessibles la classe dpoint il faut donc remplacer private par protected :

// Dclaration de la classe point
class point
{
protected :
 float abscisse, ordonnee;

public :
 void point (float, float);
 void afficher ();
};

 Programme client de dpoint :

#include "point.h"
#include "dpoint.h"

void main ()
{
 dpoint p;

 p.point (5.0, 6.5);
 p.deplacer (8.0, 11.5);
 p.afficher ();
}


Constructeur dans les classes drives




// Dclaration de la classe pointforme
class pointforme : public point
{
private :
 char forme;

public :
 pointforme (float, float, char); // constructeur de la classe pointforme

 void deformer (char);
 void afficher ();
};

// Dfinition du constructeur de la classe pointforme en appelant celui de la classe point
pointforme::pointforme (float x, float y, char f) : point (x, y)
{
 forme = f;
}

void pointforme::afficher ()
{
 point::afficher ();
 cout << "forme : " << forme << "\n";
}

pointforme p(3.5, 6.2, '*'); // utilisation du constructeur de la classe pointforme


Fonctions et classes "amies"


 La protection des attributs ou des mthodes d'une classe (private, protected) peut parfois poser problme lors de son utilisation. Il peut tre intressant d'avoir accs ses membres privs et protgs depuis l'extrieur (pour un certain nombre de fonctions ou de classes) sans pour autant perdre cette protection pour le reste du programme.

 Ceci est tout fait possible en utilisant la notion de fonction "amie" ou de classe "amie". Le mot cl utilis est friend. C'est dans la classe permettant l'accs ses informations que l'on dclarera les fonctions ou les classes amies.

// Dclaration de la classe point
class point
{
private :
 float abscisse, ordonnee;

public :
 point (float, float);

 friend class utilisepoint; // utilisepoint est une classe amie de la classe point

 friend void modifierAbscisse (point, float); // modifierAbscisse est une fonction amie
 // de la classe point

 friend void modifierOrdonnee (point, float); // modifierOrdonnee est une fonction amie
 // de la classe point
};

// Dclaration de la classe utilisepoint
class utilisepoint
{
private :
 float x, y;

public :
 utilisepoint (point);
};

// Dfinition du constructeur de la classe point
point::point (float x, float y)
{
 abscisse = x;
 ordonnee = y;
}

// Dfinition du constructeur de la classe utilisepoint partir d'un objet de type point
utilisepoint::utilisepoint (point p)
{
 x = p.abscisse; // l'accs abscisse et ordonnee est possible
 y = p.ordonnee; // car utilisepoint est une classe amie de point
}

// Dfinition de la fonction modifierAbscisse
void modifierAbscisse (point p, float x)
{
 p.abscisse = x; // l'accs abscisse est possible car modifierAbscisse
 // est une fonction amie de la classe point
}

// Dfinition de la fonction modifierOrdonnee
void modifierOrdonnee (point p, float y)
{
 p.ordonnee = y; // l'accs ordonnee est possible car modifierOrdonnee
 // est une fonction amie de la classe point
}

// Programme principal client des classes point et utilisepoint
void main ()
{
 point p(2,3);

 modifierAbscisse (p, 5);
 modifierOrdonnee (p, 10);

 utilisepoint p2(p); // p2 sera initialis avec les valeurs 5 et 10
}



  Retour en haut de page Page suivante