Bonjour
je dois creer un interface pour gerer des formes geometriques. Pour cela j'ai cree une classe Geometric, classe generique, et des classes "Sphere", "Rectangle",... qui heritent de la classe Geometric.
Pour avoir une relation du type "A contient B", un des attributs de la classe Geometric est un pointeur vers un autre objet de type Geometric. Je veux donc pouvoir, par exemple, avoir un rectangle inclus dans un autre rectangle, et acceder aux attributs des deux rectangle.
voici mon code
declaration des classes:
fonction addcontained:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 class Geometric { public: Geometric* contained; Geometric* next; double position[3]; double epsilon; Geometric(); Geometric(double position[3],double epsilon); ~Geometric(); void setposition(double position[]); void setepsilon(double epsilon); virtual bool isinside(double vector[3]); void addcontained(Geometric* contained); void addnext(Geometric next); double getepsilon(double vector[3]); }; class Rectangle: public Geometric { private: double size[3]; public: Rectangle(double position[3],double epsilon,double size[3]); void setsize(double size[3]); bool isinside(double vector[3]); };
le pointeur next sert a faire une liste d'objets contenus dans le premier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 void Geometric::addcontained(Geometric* contained) { Geometric* temp1=this->contained; if (temp1==NULL) { this->contained=contained; } else { Geometric* temp2=temp1->next; while (temp2!=NULL) {temp1=temp2;temp2=temp2->next;} temp1->next=contained; } }
Quand je teste ce programme avec le code suivant
Il me reponds que rec.contained est un objet de la classe Geometric et n'as pas d'attributs "size". Or j'ai passe un objet de type "rectangle", et je veux pouvoir acceder a tous ses attributs, pas seulement a ceux de la classe Geometric. Quelqu'un peut me dire ou est mon erreur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 int main() { double pos[3]={0.0,0.0,0.0}; double size[3]={1.0,1.0,1.0}; double size2[3]={1.0/4,1.0/4,1.0/4}; double eps=3; double eps2=12; Rectangle rec(pos,eps,size); Rectangle rec2(pos,eps2,size2); Geometric* point_rec=&rec2; rec.addcontained(point_rec); cout<<rec.contained->size[1]<<endl; return 0; }
Merci
Pierre
Partager