Bonjour,
Le but de mon programme est de créer des géométries soit un cercle, un rectangle, …, et de les stocker dans un tableau se trouvant dans une structure. Donc je veux obtenir une structure avec un tableau contenant par exemple un cercle et deux rectangles.
J’ai créé deux classes et une structure, une classe nommée “Circle” et l’autre “Geometry”, et la structure nommée “sLayer”. J’utilise le polymorphisme pour lier les deux classes :
struct sLayer
{
std::string name;
std::vector tab_geom;
};
class Geometry
{
private :
public :
virtual void print_info();
};
class Circle : public Geometry
{
private :
string name;
string layer;//Couche associe a un keepout
Coordinate center;
float diameter;
float width;
bool fill;//0=vide 1=plein
public :
Circle(Coordinate coo_tmp,float diameter_tmp,float width_tmp) : center(coo_tmp),diameter(diameter_tmp),fill(0){}
Circle();
~Circle();
virtual void print_info();
};
void Geometry::print_info()
{
cout << “Geometry :” << endl;
}
void Circle::print_info()
{
cout << “Circle :” << endl;
}
int main()
{
for(int d=int_begin; d<int_end+1; d++)
{
Geometry *obj_geom_tmp=new Geometry();
obj_geom_tmp=new Circle("0;0",0.2);
//Affichage
obj_geom_tmp->print_info(); //A
struct_layer_tmp.tab_geom.push_back(*obj_geom_tmp); //B
struct_layer_tmp.tab_geom.at(struct_layer_tmp.tab_geom.size()-1).print_info(); //C
}
}
Mon probléme est que en A ça affiche “Circle :”, donc pour l’affichage on utilise bien l’objet associé au pointeur pour appeler la fonction et non le pointeur lui même. Mais quand je stocker le pointeur dans le tableau d’objet de la structure en B et que j’utilise l’élément du tableau pour l’affichage, ça utilise le pointeur et pas le type d’objet et ça m’affiche “Geometry :”.
Qu’est ce que j’ai mal fait pour que la polymorphie ne soit plus active quand je stock mes éléments ?
En espérant avoir été assez claire dans mes explications, merci pour les réponses futures.
Edité le 06/06/2011 à 14:28