next up previous
Next: Champs privés et publiques Up: Les classes Previous: Syntaxe

Fonctions membres

De même que l'on peut placer des variables dans une classe (qu'on appelle alors champs), on peut y placer des fonctions. Exemple:

struct Tableau {

  double* tab;
  int n;

  void alloue(int a){
    n = a;
    tab = new double[n];
  }

};

Une telle fonction est appelée fonction membre de la classe Tableau. Remarquez qu'elle peut manipuler directement les champs n et tab de la classe sans préciser à quel objet ils appartiennent: ils appartiennent à l'objet qui appelle la fonction. On appelle une fonction membre de la façon suivante:

Tableau A;
A.alloue(4);

Cette dernière ligne signifie donc:

{ 
  int a = 4;
  A.n = a;
  A.tab = new double[A.n];
}

La différence entre les fonctions membres d'une classe et les fonctions déclarées en dehors de cette classe est que les premières peuvent accéder directement aux champs de l'objet qui les appelle tandis que les deuxièmes doivent avoir l'objet en question comme argument. Par exemple une fonction qui initialise à 0 tous les champs d'un objet de la classe Tableau serait:

void initialise(Tableau X){
  for (int i = 0; i<X.n; i++)
    X.tab[i] = 0.;
}

et s'appelerait de la façon suivante:

Tableau A;
initialise(A);

tandis que l'équivalent avec une fonction membre consiste à ajouter dans la définition de la classe:

void zero(){
  for (int i = 0; i<n; i++)
    tab[i] = 0.;
}

et celle-ci s'appelle de la façon:

Tableau A;
A.zero();

Le code de la page précédente s'écrit maintenant de façon beaucoup plus laconique:

Tableau A;
A.alloue(4);

A.zero();

Tableau B;
B.alloue(A.n + 1);

De même que la fonction initialise peut être découpée en deux, à savoir sa déclaration:

void initialise(Tableau X);
suivie de sa définition:
void initialise(Tableau X){
  for (int i = 0; i<X.n; i++)
    X.tab[i] = 0.;
}

on peut également séparer la déclaration à l'intérieur de la classe d'une fonction membre:

void zero();

de sa définition alors à l'extérieur de la classe:
void Tableau::zero(){
  for (int i = 0; i<n; i++)
    tab[i] = 0.;
}

L'indicateur Tableau:: est nécessaire pour préciser à quelle classe appartient cette fonction.


next up previous
Next: Champs privés et publiques Up: Les classes Previous: Syntaxe
Guillaume Charpiat 2006-12-07