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 :
Il me dit qu'il ne peut pas convertir a_vector en A.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for (unsigned int i = 0; i < a_vect->size(); i++) { A a = a_vect[i]; }
Là je ne comprends pas pourquoi il y arrive pas ....
Donc du coup je passe par les itérateurs et là ...
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 .... }
Avez-vous une idée de ce problème d'héritage ?
Merci
Cordialement,
Partager