Exercice langage C: Utilisation d'un constructeur et d'un destructeur

Imaginons une application qui traite des fichiers. Ces fichiers vont être lus en mémoire, traités puis sauvegardés. Une fois lu en mémoire, un fichier a deux caractéristiques, une adresse à partir de laquelle se situe le fichier et une longueur, ce qui se concrétisera par un pointeur et une longueur en nombre d’octets. Imaginons la classe "Fichier" avec un constructeur et un destructeur et les trois méthodes suivantes:

-la méthode "Creation" qui va allouer un certain espace à partir du pointeur P,

-la méthode "Remplit" qui va remplir arbitrairement cet espace (ces remplissages arbitraires sont la preuve de la bonne gestion mémoire car l’accès à une zone non déclarée provoque une violation d’accès),

-la méthode "Affiche" qui va afficher la zone mémoire pointée par P.

Puis écrivons un programme maître qui instancie notre classe par new, appelle nos trois méthodes et détruit l’objet par delete.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.
 
#include 
 
// déclaration de la classe Fichier
 
class Fichier
 
{
 
char* P;
 
unsigned int Lg;
 
public:
 
Fichier();
 
~Fichier();
 
bool Creation(unsigned int);
 
void Remplit();
 
void Affiche();
 
};
 
// constructeur
 
Fichier::Fichier()
 
{
 
P=NULL;
 
Lg=0;
 
}
 
// destructeur
 
Fichier::~Fichier()
 
{
 
delete P;
 
}
 
// méthode Creation
 
bool Fichier::Creation(unsigned int L)
 
{
 
if((P=(char*)malloc(L))==NULL) return false;
 
Lg=L;
 
return true;
 
}
 
// Méthode Remplit
 
void Fichier::Remplit()
 
{
 
for(unsigned int i=0;iLg;i++) P[i]='a';
 
}
 
// Méthode Affiche
 
void Fichier::Affiche()
 
{
 
for(unsigned int i=0;iLg;i++) coutP[i];
 
}
 
//-----Programma maître (main)--------------
 
void main(void)
 
{
 
Fichier* f=new Fichier();
 
if (f->Creation(10))
 
{
 
f->Remplit();
 
f->Affiche();
 
}
 
delete f;
 
}