arbitraires aux indices en cas de débordement, comme au chapitre 7.
#include
#include
using namespace std ;
/******** déclaration de la classe int2d ********/
class int2d : public vector >
{ int nlig ; // nombre de "lignes"
int ncol ; // nombre de "colonnes"
public :
int2d (int nl, int nc) ; // constructeur
int & operator () (int, int) ; // accès à un élément, par ses 2 "indices"
} ;
/*********** définition du constructeur **********/
int2d::int2d (int nl, int nc) : vector > (nl)
{ nlig = nl ; ncol = nc ;
vector v(nc) ;
int i ;
for (i=0 ; i
}
/********** 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 (*this)[i][j] ;
}
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" ;
}
}
La comparaison entre cette solution et celle du chapitre 7 montre que le gain obtenu
avec l’utilisation des composants standard reste assez relatif. Toutefois, il faut voir que
dans une situation réelle, la solution du chapitre 7 nécessiterait la redéfinition de
l’affectation et du constructeur par recopie de int2d. Cela ne serait pas nécessaire ici,
les fonctions correspondantes de la classe de base faisant l’affaire puisque la classe
dérivée ne comporte aucune partie dynamique supplémentaire.
384
#include
#include
using namespace std ;
/******** déclaration de la classe int2d ********/
class int2d : public vector
{ int nlig ; // nombre de "lignes"
int ncol ; // nombre de "colonnes"
public :
int2d (int nl, int nc) ; // constructeur
int & operator () (int, int) ; // accès à un élément, par ses 2 "indices"
} ;
/*********** définition du constructeur **********/
int2d::int2d (int nl, int nc) : vector
{ nlig = nl ; ncol = nc ;
vector
int i ;
for (i=0 ; i
/********** 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 (*this)[i][j] ;
}
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" ;
}
}
La comparaison entre cette solution et celle du chapitre 7 montre que le gain obtenu
avec l’utilisation des composants standard reste assez relatif. Toutefois, il faut voir que
dans une situation réelle, la solution du chapitre 7 nécessiterait la redéfinition de
l’affectation et du constructeur par recopie de int2d. Cela ne serait pas nécessaire ici,
les fonctions correspondantes de la classe de base faisant l’affaire puisque la classe
dérivée ne comporte aucune partie dynamique supplémentaire.
384
