Exercice 147
Énoncé
En s’inspirant de l’exercice 143, créer un patron de classes permettant de manipuler
des vecteurs dynamiques dont les éléments sont de type quelconque.
Voici la déclaration de notre patron :
#include // voir N.B. du paragraphe Nouvelles possibilités
// d'entrées-sorties du chapitre 2
using namespace std ;
template class vect
{ int nelem ; // nombre de composantes du vecteur
T * adr ; // pointeur sur partie dynamique
public :
vect (int n=1) ; // constructeur "usuel"
vect (vect & v) ; // constructeur par recopie
~vect () ; // destructeur
friend ostream & operator << (ostream &, vect &) ;
vect operator = (vect & v) ; // surdéfinition opérateur affectation
T & operator [] (int i) ; // surdef [] pour vect non constants
T operator [] (int i) const ; // surdef [] pour vect constants
} ;
Voici la définition des différentes fonctions membre :
#include "vectgen.h"
#include
using namespace std ;
template vect::vect (int n) // constructeur "usuel"
{ adr = new T [nelem = n] ;
}
template vect::vect (vect & v) // constructeur par recopie
{ adr = new T [nelem = v.nelem] ;
int i ;
for (i=0 ; i adr[i] = v.adr[i] ;
}
template vect::~vect ()
{ delete adr ;
}
template vect vect::operator = (vect & v)
{ if (this != &v) // on ne fait rien pour a=a
{ delete adr ;
adr = new T [nelem = v.nelem] ;
int i ;
for (i=0 ; i adr[i] = v.adr[i] ;
}
return * this ;
}
template T & vect::operator [] (int i)
{ return adr[i] ;
368
Précédent

- 369/398

Suivant