Bonjour, j'aimerais créer un tableau de type vector, mais que ce tableau puisse contenir plusieurs type d'objets mais qui héritent tous d'une meme classe : si j'ai par exemple trois classes a1,a2,a3 qui héritent de la classe A, j'aimerais que le tableau puisse contenir indifféremment des objets de type a1,a2,a3
Merci beaucoup !!! Et pour les supprimer du tableau, il faut que je détruise l'objet deux fois non ? une fois dans le tableau et une fois hors du tableau ? et si oui, comment faire pour faire le lien entre l'objet hors du tableau et dans le tableau ?
class b : public a
{
int aff()
{
printf("objet B\n");
}
};
class c : public a
{
int aff()
{
printf("objet C\n");
}
};
int main()
{
std::vectorTab;
for(int i=0;i<8;i++)
{ // premiere méthode pour allouer, on crée comme avant .. mais en boucle !!
a * filsC = new c;
Tab.push_back(filsC);
}
for(int i=0;i<8;i++)
{
Tab.push_back(NULL);
Tab[Tab.size()-1] = new b; // on crée directement sur le tableau
// on aurait même simplifier en Tab.push_back(new b); class nan ?? ^^
}
for(int i=0;i<Tab.size();i+=3)
{
Tab[i]->~a();// voila comment on efface ...
Tab[i] = NULL; // pour ensuite savoir lequels pointe bien sur qqchose ( l'erreur est très joli //sinon ) .. :D
}
for(int i=0;i<Tab.size();i++)
if(Tab[i]!=NULL) // faut éviter d'appeller des objets "vides" ..
Tab[i]->aff();
else
printf("Aucun objet\n");
printf("\n"); // au cause de la bufferisation du stdout ...
return 0;// toujours mettre un return 0 ...
}
En fait pour le Tab[i]->~a(); je pense qu'il vaut mieux mettre delete Tab[i] ..
La virtual sert à utiliser des objets mixtes, ici on l'utilise sous forme a .. sinon il faudrait caster en b ou c ...
J'ai l'impression qu'un bon tuto sur l'héritage te serait plus utile que mes réponses vite faites.
caster c'est à dire mettre comme si c'était un b ou un c
A quoi te sert d'avoir un vecteur de plein de types hérités si tu ne sais ni caster ni utiliser des fonctions virtuelles ?
c'est bon j'ai trouvé un bon bouquin qui m'a tout bien expliqué les fonctions virtuelles ...
J'ai fait ce que vous m'aviez conseillé mais le compilateur (dev c++) me donne l'erreur suivante, que je n'arrive pas a comprendre :
main.o(.text$_ZN5objetC2Effffff[objet::objet(float, float, float, float, float, float)]+0x3d) In function `ZNSt12_Vector_baseIP5objetSaIS1_EE12_Vector_implD1Ev':
[Linker error] undefined reference to `vtable for objet'