En ce qui concerne l’accès à un élément, il se fera en surdéfinissant l’opérateur (),
d’une manière comparable à ce que nous avions fait pour [] ; là encore, C++ impose
que () soit défini comme fonction membre.
Pour nous protéger d’un éventuel débordement d’indice, nous ferons en sorte qu’une
valeur incorrecte d’un indice conduise à « faire comme si » on lui avait attribué la
valeur 0.
Voici ce que pourraient être la déclaration et la définition de notre classe :
/******** déclaration de la classe int2d ********/
class int2d
{ int nlig ; // nombre de "lignes"
int ncol ; // nombre de "colonnes"
int * adv ; // adresse emplacement dynamique contenant les valeurs
public :
int2d (int nl, int nc) ; // constructeur
~int2d () ; // destructeur
int & operator () (int, int) ; // accès à un élément, par ses 2 "indices"
} ;
/*********** définition du constructeur **********/
int2d::int2d (int nl, int nc)
{ nlig = nl ;
ncol = nc ;
adv = new int [nl*nc] ;
int i ;
for (i=0 ; i }
/*********** définition du destructeur ***********/
int2d::~int2d ()
{ delete adv ;
}
/********** définition de l'opérateur () *********/
int & int2d::operator () (int i, int j)
{ if ( (i<0) || (i>=nlig) ) i=0 ; // protections sur premier indice
if ( (j<0) || (j>=ncol) ) j=0 ; // protections sur second indice
return * (adv + i * ncol + j) ;
}
Voici un petit exemple d’utilisation de notre classe int2d, accompagné du résultat fourni
par son exécution :
#include "int2d.h"
#include
using namespace std ;
main()
{ int2d t1 (4,3) ;
int i, j ;
for (i=0 ; i<4 ; i++)
for (j=0 ; j<3 ; j++)
t1(i, j) = i+j ;
for (i=0 ; i<4 ; i++)
{ for (j=0 ; j<3 ; j++)
cout << t1 (i, j) << " " ;
cout << "\n" ;
}
}
215
Précédent

- 216/398

Suivant