Vous êtes sur la page 1sur 17

Programmation g oriente objet

Variables et fonctions statiques

Georges Abou Khalil - cole Polytechnique de Montral

Plan

Variables globales statiques Variables locales statiques q Fonctions globales statiques Attributs statiques Mthodes statiques

10/10/2008

Georges Abou Khalil

Mot clef static


Tout lment statique est dclar en C/C++ laide du mot clef static Le sens du mot-clef static diffre selon le type yp d'lment auquel q il est associ

10/10/2008

Georges Abou Khalil

Variables globales statiques


Rappelons quune variable globale est une variable dclare lextrieur de toute fonction et est donc visible dans toutes les fonctions Une variable globale statique est une variable globale qui est uniquement visible lintrieur du fichier dans lequel elle est dclare Elle ne peut donc pas tre exporte vers dautres fichiers D Dans l le cadre d d de ce cours, ce t type d de variable i bl nest t pas utilis

10/10/2008

Georges Abou Khalil

Variables locales statiques


Une variable locale dclare statique nest pas dtruite lors de la sortie de la fonction Ainsi, lorsque la fonction est appele nouveau, la valeur de la variable statique est celle qu quelle elle avait la fin du dernier appel de la fonction Elle se comporte donc comme une variable globale, mais n nest est visible qu qu l lintrieur intrieur de la fonction o elle est dclare La dclaration dune variable statique se fait de la manire suivante :
static type nom = valeurInitiale;

10/10/2008

Georges Abou Khalil

Variables locales statiques (suite)


Reprenons lexemple de la suite de Fibonacci :


int fibonacci() { static t ti i int t n1 1 = 0 0; static int n2 = 1; int temp = n1 + n2; n1 = n2; ; n2 = temp; return n1; }

10/10/2008

Georges Abou Khalil

Variables locales statiques (suite)


Appel 1er
2me

Valeur de n1 0 1 1 2

Valeur de n2 1 1 2 3

3me 4me

10/10/2008

Georges Abou Khalil

Fonction globales statiques


Une fonction globale statique, comme une variable globale statique, est uniquement visible lintrieur du fichier dans lequel elle est dclare Dans le cadre de ce cours, ce type de fonction nest pas utilis

10/10/2008

Georges Abou Khalil

Attributs statiques

Un attribut statique est un attribut qui est partag par toutes les instances de cette classe Ainsi, il en existe une et une seule version, et sa valeur est la mme pour tous les objets de la classe Un tel attribut est appel attribut de classe
10/10/2008
Georges Abou Khalil

Attributs statiques (suite)


Les attributs L ib statiques i d dune classe l sont crs au dmarrage du programme. Ils existent donc mme si aucune instance de la classe nest cre Ils peuvent tre accds comme un attribut (oprateurs p . et ->) ou bien directement, normal ( laide de loprateur :: Comme tout attribut, un attribut statique possde une visibilit (public, private ou protected) Les attributs statiques doivent tre dclars dans le fichier cpp et on peut alors leur spcifier une valeur initiale
10/10/2008
Georges Abou Khalil

10

Attributs statiques - Exemple


Classe.h :
class Classe { private: static int varStatique_; };

Classe.cpp :
int Classe::varStatique_ = 0;
10/10/2008
Georges Abou Khalil

11

Mthodes statiques

Une mthode statique est une mthode qui nopre pas sur des objets U t Une telle ll mthode th d peut t t tre appele l partir ti dun objet (oprateurs . et ->) ou laide de loprateur l oprateur :: Mme si une mthode statique est appele partir dun objet, j elle ne possde pas de pointeur this Les mthodes statiques sont appeles mthodes th d d de classe l
10/10/2008
Georges Abou Khalil

12

Mthodes statiques (suite)


Comme les mthodes statiques nont pas de pointeurs this, elles se comportent comme des fonctions globales Les mthodes statiques ont cependant lavantage davoir accs tous les lments de la classe, comme toute autre mthode Les mthodes statiques sont donc gnralement utilises pour manipuler des attributs statiques qui sont privs (ou protgs) et donc non accessibles en dehors de la classe (et de ses drives)

10/10/2008

Georges Abou Khalil

13

Mth d Mthodes statiques t ti - Exemple E l


Un exemple simple dutilisation de mthodes et attributs statiques est lajout dun compteur dinstances chaque fois quun qu un objet est cr cr, un compteur est incrment (dans le constructeur) chaque fois quun objet est dtruit, un compteur est dcrment ( (dans le destructeur) ) Le compteur est un attribut priv statique de la classe, initialis 0 Il existe une mthode statique q p pour retourner la valeur du compteur

10/10/2008

Georges Abou Khalil

14

Mth d Mthodes statiques t ti - Exemple E l


Classe h : Classe.h
class Classe { public: Classe() { compteur++; } ~Classe() { compteur--; } static int getCompteur() { return compteur_; } private: i t static int compteur_; };

Classe cpp : Classe.cpp


int Classe::compteur_ = 0;

Tous les objets de cette classe partageront le mme attribut compteur

10/10/2008

Georges Abou Khalil

15

Mth d Mthodes statiques t ti - Exemple E l


Main cpp : Main.cpp


int main() { cout << Classe::getCompteur() Classe* ptr1 = new Classe(); cout << Classe::getCompteur() Classe* ptr2 = new Classe(); cout << Classe::getCompteur() delete ptr2; cout << Classe::getCompteur() delete ptr1; cout << Classe::getCompteur() }

<< endl; << endl; << endl; << endl; << endl;

10/10/2008

Georges Abou Khalil

16

Mth d Mthodes statiques t ti - Exemple E l


Affichage :
0 1 2 1 0

10/10/2008

Georges Abou Khalil

17

Vous aimerez peut-être aussi