Nous partons de la structure suivante, devant faire partie de l'espace
de noms
encap dans le fichier
struct_init.hpp :
struct DummyRange
{
int low, high;
};
Il s'agit d'une part de faire en sorte que ce type respecte un invariant
extrêmement simple : la borne basse doit nécessairement être
inférieure à la borne haute.
Pour ceci, il faudra apporter toutes les modifications nécessaires à
ce type structuré pour respecter les exigences suivantes :
- Les conventions de mise en forme de ce type et de ses membres
doivent signifier clairement qu'un invariant est assuré.
- Un constructeur permettant d'initialiser librement les deux données
membres doit être fourni.
- S'il constate que la borne basse est supérieure à la borne haute,
alors il doit le signifier explicitement avec une exception de type
std::runtime_error.
- Un constructeur attendant un seul paramètre entier width se
contentera d'invoquer par délégation le constructeur précédent
avec les bornes 0 et width.
Les définitions des constructeurs prendront place dans le fichier
struct_init.cpp.
D'autre part, il faut réaliser, dans le fichier
prog_ex0401.cpp, cette
fonction :
void
test_DummyRange()
{
std::cout << "\n~~~~ " << __func__ << "() ~~~~\n";
// ...construct correct range (one parameter)...
std::cout << "correct range initialised\n";
try
{
// ...construct incorrect range (two parameters)...
std::cout << "incorrect range initialised\n";
}
catch(const std::exception &e)
{
std::cerr << "!!! Exception: " << e.what() << " !!!\n";
}
}
qui sera appelée depuis la fonction
main().
Elle doit être complétée en déclarant à chacun des deux emplacements
indiqués une variable de type
DummyRange initialisée à votre
convenance :
- la première utilisera le constructeur à un seul paramètre,
- la seconde utilisera celui à deux paramètres ; dans ce cas, les
paramètres de l'initialisation devront être choisis de façon à ce que
le constructeur lève l'exception prévue.