Académique Documents
Professionnel Documents
Culture Documents
Cours 2 - Classes Et Objet - 2 PDF
Cours 2 - Classes Et Objet - 2 PDF
Page 1
25/10/2010
Exemple tester
#include <iostream.h> /* ------- Dclaration de la classe point --------- */ int compteur =0; class point { /* dclaration "classique" des donnes */ int x ; int y ; /* dclaration des fonctions membres (mthodes) */ public : point (int, int) ; void deplace (int, int) ; void affiche () ; ~point(); } ; /* ----Dfinition des fonctions membres du type point ---- */ point::point (int abs, int ord) { x = abs ; y = ord ; compteur++; } void point::deplace (int dx, int dy) { x += dx ; y += dy ; } void point::affiche () { cout << "Je suis en " << x << " " <<y<<" compteur= " <<compteur<< "\n" ; } point::~point () { compteur--; cout<<"compteur = "<<compteur<<endl; } main() { point a(5,2); a.affiche () ; a.deplace (3,1) ; a.affiche () ; point b(-2,4) ; b.affiche () ; }
P.O.O
M43
M.Semghouni
Page 2
25/10/2010
Solution POO Dans ce cas nous avons besoin d'une variable qui soit partage par tous les objets, ceci consiste a qualifier la variable de static on parle alors de variable de classe c'est--dire une seule variable qui appartient a tous les objets D'o la dclaration
/* --- Dclaration de la classe point avec attribut static --- */ class point{ static int compteur; int x ; int y ; public : point (int, int) ; void deplace (int, int) ; void affiche () ; } ;
Initialisation des membres donns statiques Une donne statique est une donne de la classe ce qui veut dire qu'elle existe en un seul exemplaire, indpendamment des objets de la classe. Son initialisation doit tre faite mme si aucun objet n'a encore exist. Donc un membre statique doit tre initialis l'extrieur de la dclaration de la classe comme suit : int point::compteur =0; - Tester dans l'exemple de point d'crire int x = 0 dans la dclaration de la classe puis tester la mme chose pour la donne statique
int point::compteur=0; point::point (int abs, int ord) {x = abs ; y = ord ;compteur++; cout<<"il existe "<<compteur <<" points "<<endl ; } void point::deplace (int dx, int dy) { x = x + dx ; y = y + dy ; } void point::affiche () { cout << "Je suis en " << x << " " << y << "\n" ; } point::~point () {compteur--; cout<<"il existe "<<compteur <<" points"<<endl ; }
- Une donne statique constante peut tre initialise au moment de sa dclaration mais il reste aussi une autre initialisation extrieure sans valeur pour pouvoir rserver l'espace mmoire correspondant Exemple class exple3
{ static const int n=5 ; // initialisation OK depuis la norme ANSI ..... } const int exple3::n ; // dclaration indispensable (sans valeur)
P.O.O
M43
M.Semghouni
Page 3
25/10/2010
- il est conseill de prvoir linitialisation des membres donns statiques dans le fichier contenant la dfinition de la classe (compilation spare). Le problme ne se pose pas au cas o on 'a qu'un seul fichier source Recherche - Ecrire une classe ayant un attribut constant que vous initialiser une valeur donne - soit l'criture
point::point (int abs, int ord) { x = abs ; y = ord ; compteur++; cout<<"il existe "<<compteur <<" points "<<endl ; }
P.O.O
M43
M.Semghouni