opérateur [] :
#include
#include // pour la classe vector
using namespace std ;
main()
{ vector v(6) ;
int i ;
for (i=0 ; i<6 ; i++) v[i] = i ;
for (i=0 ; i<6 ; i++) cout << v[i] << " " ;
}
Voici un second exemple (accompagné du résultat fourni par son exécution) qui montre
comment utiliser la fonction at de la classe vector et traitant de façon appropriée
l’exception standard out_of_range :
#include
#include // pour la classe vector
#include // pour la classe exception out_of_range
using namespace std ;
main()
{ try
{ vector v(6) ;
int i ;
for (i=0 ; i<6 ; i++) v.at(i) = i ;
for (i=0 ; i<8 ; i++) cout << v.at(i) << " " ; // ici on deborde de v
}
catch (out_of_range oor)
{ cout << "exception out of range\n" ;
exit(-1) ;
}
}
0 1 2 3 4 5 exception out of range
Voici un troisième exemple dans lequel on crée une classe vect dérivée de vector.
Ici, on déclenche une exception out_of_range en cas d’indice incorrect. Notez qu’il est
nécessaire de redéfinir le constructeur à un argument entier de vect, bien que son corps
soit vide, ceci afin de transmettre la dimension au constructeur de la classe de base. Il
faudrait d’ailleurs faire de même pour tout constructeur de vect avec arguments qu’on
souhaiterait pouvoir utiliser.
#include // voir N.B. du paragraphe Nouvelles possibilités
// d'entrées-sorties du chapitre 2
#include // pour la classe vector
#include // pour la classe exception out_of_range
using namespace std ;
class vect : public vector
{ public :
vect (int dim) : vector (dim) {} // indispensable
// surdéfinition de l'opérateur []
int & operator [] (int i)
{ // on pourrait aussi chercher à modifier autoritairement la valeur
// de i par :
// if ( (i<0) || (i>=(*this).size()) ) i=0 ;
return (*this).at(i) ;
380
Précédent

- 381/398

Suivant