C++ héritage et vector iterator
Bonjour,
Il y a une notion que je ne comprends pas sur les itérators.
J'ai une classe A ainsi qu'une class B qui hérite de A et une class C qui hérite aussi de A.
Je crée des Objets B (donc via new B(...)) que j'ajoute dans un vector de A.
typedef std::vector<A> a_vector; via la commande push_back. Jusque là tout est normal.
Par contre ce que je ne comprends pas c'est que si je fais :
Code:
1 2 3 4
| for (unsigned int i = 0; i < a_vect->size(); i++)
{
A a = a_vect[i];
} |
Il me dit qu'il ne peut pas convertir a_vector en A.
Là je ne comprends pas pourquoi il y arrive pas ....
Donc du coup je passe par les itérateurs et là ...
Code:
1 2 3 4 5
| for (a_vector::iterator it = a_vect->begin() ; it != a_vect->end(); it++)
{
A a = *it; // ca, ca marche sans probleme
B* b = dynamic_cast<B*> (&a); // et la ca me donne toujours null et ca je ne comprends pas vu que je n'ai jamais fait de new A mais uniquement des new B ....
} |
Dans le débugger le _vptr vaut bien B avant l'ajout dans le vector et mais il faut A en tant qu'itérateur. C'est comme ca le fait que je déclarait un itérateur de type A faisait que seulement la partie A de mes objets B serait visible.
Avez-vous une idée de ce problème d'héritage ?
Merci
Cordialement,