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
É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
// d'entrées-sorties du chapitre 2
using namespace std ;
template
{ 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
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
{ adr = new T [nelem = n] ;
}
template
{ adr = new T [nelem = v.nelem] ;
int i ;
for (i=0 ; i
}
template
{ delete adr ;
}
template
{ if (this != &v) // on ne fait rien pour a=a
{ delete adr ;
adr = new T [nelem = v.nelem] ;
int i ;
for (i=0 ; i
}
return * this ;
}
template
{ return adr[i] ;
368
