|
|
Structures
Annuaire Exercice 4 Réservation de mémoire - 1 - |
|
Où
en sommes-nous ?
|
||||||||
|
Nous avons laissé un problème de côté : celui de l'occupation abusive d'espace mémoire que représente la déclaration d'un fichier sous la forme : Fiche Fichier[NB_MAX_FICHES]; Il est en effet possible de réserver de la mémoire progressivement, au fur et à mesure des besoins. C'est la réservation dynamique de mémoire. Attention
! cette opération est de la compétence du système
d'exploitation de votre ordinateur. L'OS (Operating System) ou "système d'exploitation" doit :
Il vaut mieux laisser à l'OS cette gestion compliquée (d'ailleurs on ne peut pas faire autrement). Nous disposons pour cela de deux opérateurs (ce ne sont pas des fonctions) :
Et, aussi de deux fonctions :
Ci-dessous, la suite de notre programme en utilisant les opérateur nex et delete |
||||||||
|
Programme
principal modifié : Annuaire.cpp
|
|
|
|
Commentaires
sur le nouveau programme principal
|
|
Les seules références à tout ce qui touche au fichier et aux fiches de ce fichier sont les 4 procédures : InitialisationFiche() Notre
souci est de vous amener progressivement à la notion d'objet Plus tard nous appelleons l'ensemble des données et des procédures relatives à "Fiche" : l'objet "Fiche" Cet objet "Fiche" sera toujours défini dans deux fichiers :
On a ainsi voulu empêcher l'utilisateur de l'objet "Fiche" de modifier cet objet : la notion de programmation objet a beaucoup apporté à la sécurité de programmation. Attention : nous ne faisons pas encore de programmation orintée objet : nous en amorçons seulement le concept. |
|
Constructeurs
& destructeurs
|
|||
|
En programmation orientée objet on déclare toujours un objet de même qu'en programmation classique on déclare une variable. Mais
un objet est plus complexe q'une variable, il a besoin d'une procédure
d'initialisation que l'on appelle "Constructeur", systématiquement
appelée "Fiche()".
Commentaire : Fichier
= new Fiche [nbFiches]; Commentaire
sur la procédure :
Tant la valeur retournée par fread(...) - qui n'est autre que le nombre de structures réelement lues - n'est pas nulle on continue à lire. Quand elle est nulle on est en fin de fichier : on s'arrête de lire. On nous dit souvent qu'il aurait fallu écrire : while(fread(&F,sizeof(Fiche),1,pAF) != 0) mais cela revient au même que : while(fread(&F,sizeof(Fiche),1,pAF)) car
while(variable ) évalue "variable" en tant que booléen. Commentaire sur la fonction "FinalisationFiche" - notre destructeur.
EcritFichier
enregistre le fichier sur le disque |
|
Procédure
AjoutFiche(...)
|
|
|
|
Fiche.h
|
|
|
|
Dans
"Annuaire5" qui suit, nous montrons une version du même
programme
en utilisant cette fois les fonctions de réservation de mémoire malloc() et free() |
|
|