Sve@r | Bonjour,
je suis en train de me mettre au C++. Il se trouve que je dois gérer un tableau d'objets. J'ai donc créé une classe "cArrayElem" qui s'occupe de la gestion du tableau et une classe "cElem" qui s'occupe de chaque élément.
De plus, pour pouvoir gérer le nb d'élements, j'aurais pu mettre une variable "nb" dans la classe "cArrayElem" mais j'ai préféré mettre une variable statique "nb" dans la classe "cElem"
Donc j'ai fait un essai simple qui fonctionne très bien mais j'aimerais savoir si, conceptuellement, c'est bien pensé.
Voici le source
Code :
- #include <stdio.h> // I/O fichiers classiques
- #include <stdlib.h> // Standard librairies
- #define SZ (5) // Taille des allocations
- // Classe pour gérer un tableau d'éléments
- class cArrayElem {
- public:
- cArrayElem(int); // Constructeur tableau
- ~cArrayElem(void); // Destructeur tableau
- class cElem; // Déclaration de la classe fille
- cElem **tabElem; // Tableau d'éléments
- int i; // Indice de boucle
- };
- // Classe pour gérer un élément
- class cArrayElem::cElem {
- public:
- cElem(int); // Constructeur élément
- ~cElem(void); // Destructeur élément
- int valeur; // Valeur de l'élément
- static int nb; // Nb réel d'éléments
- static int sz; // Taille allouée
- };
- // Création des variables statiques de la classe "cElem"
- int cArrayElem::cElem::nb;
- int cArrayElem::cElem::sz;
- // Constructeur d'un élément
- cArrayElem::cElem::cElem(int x)
- {
- // Affichage de contrôle
- printf("Création 0x%x - x=%d, nb=%d, sz=%d\n", this, x, cElem::nb, cElem::sz);
- // Nouvel élément => nb d'éléments augmente
- nb++;
- // On remplit sa valeur
- valeur=x * x;
- }
- // Destructeur d'un élément
- cArrayElem::cElem::~cElem(void)
- {
- // Affichage de contrôle
- printf("Suppression 0x%x - nb=%d, sz=%d\n", this, cElem::nb, cElem::sz);
- // Destruction d'élément => nb d'éléments diminue
- nb--;
- }
- // Constructeur du tableau des éléments
- cArrayElem::cArrayElem(int nb)
- {
- // Allocation initiale
- tabElem=(cElem**)malloc(SZ * sizeof(cElem*));
- cElem::sz=SZ;
- cElem::nb=0;
- // Boucle de remplissage
- for (i=0; i < nb; i++)
- {
- // Si on a atteint la taille allouée
- if (cElem::nb == cElem::sz)
- {
- // On incrémente cette taille
- cElem::sz+=SZ;
- // On réalloue
- tabElem=(cElem**)realloc(tabElem, cElem::sz * sizeof(cElem*));
- }
- // On crée l'élément
- tabElem[i]=new cElem(i);
- }
- printf("\n" );
- }
- // Destructeur du tableau des éléments
- cArrayElem::~cArrayElem(void)
- {
- printf("\n" );
- // Boucle de destruction
- while (cElem::nb)
- {
- // On supprime l'élément
- delete tabElem[cElem::nb - 1];
- }
- // On supprime le tableau d'éléments
- free(tabElem);
- }
- int main(void)
- {
- // Création du tableau
- cArrayElem Array(12);
- // Affichage
- printf("Array nb=%d, sz=%d\n", cArrayElem::cElem::nb, cArrayElem::cElem::sz);
- for (Array.i=0; Array.i < cArrayElem::cElem::nb; Array.i++)
- printf("Array(%d)=%d\n", Array.i, Array.tabElem[Array.i]->valeur);
- return(0);
- }
|
Merci de m'avoir lu Message édité par Sve@r le 07-04-2005 à 11:50:10
|