concernés (en en faisant une « copie profonde »).
Pour satisfaire aux contraintes de l’énoncé, il nous faut donc prévoir de définir, dans
vectok, un constructeur par recopie. Il faut alors tenir compte de ce que la recopie d’un
objet de type vectok (qui fera donc appel à ce constructeur) entraînera alors l’appel du
constructeur de vect qui sera indiqué dans l’en-tête du constructeur par recopie de
vectok, du moins si une telle information est précisée (dans le cas contraire, il y aurait
appel d’un constructeur sans argument de vect, ce qui n’est pas possible ici). Ici, nous
disposons donc de deux possibilités :
demander l’appel du constructeur par recopie de vect, ce qui conduit à cet en-tête :
vectok::vectok (vectok & v) : vect (v)
(rappelons que l’argument v, de type vectok, sera implicitement converti en type vect,
pour pouvoir être transmis au constructeur vect).
Cette façon de faire conduit à la création d’un objet de type vect, obtenu par recopie
(par défaut) de v. Il faudra alors compléter le travail en créant un nouvel
emplacement dynamique pour le vecteur et en adaptant correctement la valeur de adr.
demander l’appel du constructeur à un argument de vect, ce qui conduit à cet en-tête :
vectok::vectok (vectok & v) : vect (v.nelem)
Cette fois, il y aura création d’un nouvel objet de type vect, avec son propre
emplacement dynamique, dans lequel il faudra néanmoins recopier les valeurs de v.
C’est cette dernière solution que nous choisirons ici.
Toujours pour satisfaire aux contraintes de l’énoncé, nous devons surdéfinir
l’affectation dans la classe vectok. Ici, aucun choix ne se présente. Nous utiliserons
l’algorithme présenté dans l’exercice 87.
Voici ce que pourraient être la déclaration et la définition de notre classe vectok :
/**** déclaration de la classe vectok ****/
#include "vect.h"
class vectok : public vect
{ // pas de nouveaux membres donnée
public :
vectok (int dim) : vect (dim) // constructeur de vectok : se contente
{} // de passer dim au constructeur de vect
vectok (vectok &) ; // constructeur par recopie de vectok
vectok & operator = (vectok &); // surdéfinition de l'affectation de vectok
int taille ()
{ return nelem ;
}
} ;
/***** définition du constructeur par recopie de vectok *****/
// il doit obligatoirement prévoir des arguments pour un constructeur
// (quelconque) de vect (ici le constructeur à un argument)
vectok::vectok (vectok & v) : vect (v.nelem) // ou const vectok & v
{ int i ;
for (i=0 ; i
257
Pour satisfaire aux contraintes de l’énoncé, il nous faut donc prévoir de définir, dans
vectok, un constructeur par recopie. Il faut alors tenir compte de ce que la recopie d’un
objet de type vectok (qui fera donc appel à ce constructeur) entraînera alors l’appel du
constructeur de vect qui sera indiqué dans l’en-tête du constructeur par recopie de
vectok, du moins si une telle information est précisée (dans le cas contraire, il y aurait
appel d’un constructeur sans argument de vect, ce qui n’est pas possible ici). Ici, nous
disposons donc de deux possibilités :
demander l’appel du constructeur par recopie de vect, ce qui conduit à cet en-tête :
vectok::vectok (vectok & v) : vect (v)
(rappelons que l’argument v, de type vectok, sera implicitement converti en type vect,
pour pouvoir être transmis au constructeur vect).
Cette façon de faire conduit à la création d’un objet de type vect, obtenu par recopie
(par défaut) de v. Il faudra alors compléter le travail en créant un nouvel
emplacement dynamique pour le vecteur et en adaptant correctement la valeur de adr.
demander l’appel du constructeur à un argument de vect, ce qui conduit à cet en-tête :
vectok::vectok (vectok & v) : vect (v.nelem)
Cette fois, il y aura création d’un nouvel objet de type vect, avec son propre
emplacement dynamique, dans lequel il faudra néanmoins recopier les valeurs de v.
C’est cette dernière solution que nous choisirons ici.
Toujours pour satisfaire aux contraintes de l’énoncé, nous devons surdéfinir
l’affectation dans la classe vectok. Ici, aucun choix ne se présente. Nous utiliserons
l’algorithme présenté dans l’exercice 87.
Voici ce que pourraient être la déclaration et la définition de notre classe vectok :
/**** déclaration de la classe vectok ****/
#include "vect.h"
class vectok : public vect
{ // pas de nouveaux membres donnée
public :
vectok (int dim) : vect (dim) // constructeur de vectok : se contente
{} // de passer dim au constructeur de vect
vectok (vectok &) ; // constructeur par recopie de vectok
vectok & operator = (vectok &); // surdéfinition de l'affectation de vectok
int taille ()
{ return nelem ;
}
} ;
/***** définition du constructeur par recopie de vectok *****/
// il doit obligatoirement prévoir des arguments pour un constructeur
// (quelconque) de vect (ici le constructeur à un argument)
vectok::vectok (vectok & v) : vect (v.nelem) // ou const vectok & v
{ int i ;
for (i=0 ; i
