« en ligne ».
Notez que, ici encore, nous avons fait en sorte qu’une tentative d’accès à un élément
situé en dehors du vecteur conduise à accéder à l’élément de rang 0. Dans la pratique,
on aura intérêt à utiliser des protections plus élaborées.
À titre indicatif, voici un petit programme, accompagné du résultat fourni par son
exécution, utilisant ce patron (dont on suppose que la définition figure dans vectgen.h) :
#include "vectgen.h"
#include
using namespace std ;
main()
{ vect vi (10) ;
vi[5] = 5 ; vi[2] = 2 ;
cout << vi[2] << " " << vi[5] << "\n" ;
vect vd (3) ;
vd[0] = 0.0 ; vd[1] = 0.1 ; vd[2] = 0.2 ;
cout << vd[0] << " " << vd[1] << " " << vd[2] << "\n" ;
cout << vd[12] << "\n" ;
vd[12] = 1.2 ; cout << vd[12] << " " << vd[0] ;
}
2 5
0 0.1 0.2
0
1.2 1.2
Notre patron vect permet d’instancier des vecteurs dynamiques dans lesquels les
éléments sont de type absolument quelconque, en particulier de type classe (pourvu que
ladite classe dispose d’un constructeur sans argument). Il n’en serait pas allé ainsi si
nous avions initialisé les éléments du tableau lors de leur construction par :
int i ;
for (i=0 ; i
En effet, dans ce cas, ces instructions auraient convenablement fonctionné pour
n’importe quel type de base (par conversion de l’entier 0 dans le type voulu). En
revanche, pour être applicable à des éléments de type classe, il aurait fallu, en outre,
que la classe concernée dispose d’une conversion d’un int dans ce type classe, c’est-àdire d’un constructeur à un argument de type numérique.
320
Notez que, ici encore, nous avons fait en sorte qu’une tentative d’accès à un élément
situé en dehors du vecteur conduise à accéder à l’élément de rang 0. Dans la pratique,
on aura intérêt à utiliser des protections plus élaborées.
À titre indicatif, voici un petit programme, accompagné du résultat fourni par son
exécution, utilisant ce patron (dont on suppose que la définition figure dans vectgen.h) :
#include "vectgen.h"
#include
using namespace std ;
main()
{ vect
vi[5] = 5 ; vi[2] = 2 ;
cout << vi[2] << " " << vi[5] << "\n" ;
vect
vd[0] = 0.0 ; vd[1] = 0.1 ; vd[2] = 0.2 ;
cout << vd[0] << " " << vd[1] << " " << vd[2] << "\n" ;
cout << vd[12] << "\n" ;
vd[12] = 1.2 ; cout << vd[12] << " " << vd[0] ;
}
2 5
0 0.1 0.2
0
1.2 1.2
Notre patron vect permet d’instancier des vecteurs dynamiques dans lesquels les
éléments sont de type absolument quelconque, en particulier de type classe (pourvu que
ladite classe dispose d’un constructeur sans argument). Il n’en serait pas allé ainsi si
nous avions initialisé les éléments du tableau lors de leur construction par :
int i ;
for (i=0 ; i
n’importe quel type de base (par conversion de l’entier 0 dans le type voulu). En
revanche, pour être applicable à des éléments de type classe, il aurait fallu, en outre,
que la classe concernée dispose d’une conversion d’un int dans ce type classe, c’est-àdire d’un constructeur à un argument de type numérique.
320
