[c++] tableau dynamique d'objet de ma classe

[Résolu/Fermé]
Signaler
-
 guy -
Bonjour,

j'ai créé une classe "outils" (rien de special, juste 2 attributs "string" (nom et type de l'outils)

imaginons que les outils peuvent etre stocker dans plusieurs armoire de plusieurs tiroirs dont certain seront vides

je souhaite créer un tableau dynamique à 2 dimension ( la première pour le numero de l'armoir et le deuxième pour le numero du tiroir)

au depart je différenciais par les outils et j'avais simplement creer un tableau de bool (bool **tab), je pouvais alors dire si un tiroir contenait un outils ou pas

mais pour les differencier j'ai donc creer une classe "outils" et du coup je seche sur la manière de faire pour créer un tableau de "outils" qui aura dans certains cas aucun outils

avez une idée de ce que je pourrais faire

2 réponses

Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
641
Bonjour,

C'est ici qu'apparaissent toute l'utilité des pointeurs.

Ce qu'il faut faire, ce n'est pas un tableau contenant les objets, mais un tableau de pointeurs vers ces objets.
Tu crées ensuite tes objets (dynamiquement ou non), et tu insères un pointeur vers chacun de ces objets dans ton tableau. Si une case du tableau ne contient pas d'objet, tu n'as qu'à la mettre à NULL.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

merci pour ta reponse, j'utilise donc "Outils ***tab" pour avec 2 dimension

mais du coup je me demande si la classe "Outils" peux avoir ma classe qui contient le tableau d'outils (que je vais appeler "Casier") en "friend"

sachant que j'ai une autre classe qui gere l'affichage dans la console

sans "friend" le code pour l'affichage des outils serait:
for(int i=0;i<casier.getLargeur();i++){
     for(int j=0;j<casier.getLongueur();j++)
              if(casier.getOutils(i,j) == NULL)        // devrait je faire cela dans le code de l'affichage
                     cout<<"vide";
              else
                     cout<<casier.getOutils(i,j)->getNom(); 

avec
Outils *Casier::getOutils(i,j){ return tab[i][j] ; }

je me dis alors que si je met le "friend" je deplace l'assesseur "string getNom()" de la classe "Outils" vers la classe "Casier" l'assesseur devenant donc "string getNomOutils(int ligne,int colonne)"
je pourrais ainsi avoir le code suivant :

string Casier::getNomOutils(int ligne,int colonne){
              if(tab[i][j] == NULL)        // devrait je faire cela dans le code de l'affichage
                     return "vide";
              else
                     return tab[i][j]->nom; 


et donc
for(int i=0;i<casier.getLargeur();i++){
     for(int j=0;j<casier.getLongueur();j++)
             cout<<casier.getNomOutils(i,j); 


utiliser "friend" me parait plus logique mais je ne suis pas sur si son utilisation serait juste