Bonjour,
J'ai un problème concernant l'héritage.
En effet, je désire avoir une classe GEometric Shape virtuelle et 2 sous classes Ellipse et Polygon.
J'ai crée cette classe virtuelle pour pouvoir utiliser ce type générique par ailleurs. par exemple j'aimerai pouvoir avoir un vecteur de GeometricShape dans une autre classe.
Voici le code de mes classes :
Classe GeometricShape :
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 #ifndef GEOMETRICSHAPE_HPP_ #define GEOMETRICSHAPE_HPP_ #include "Point.h" #include <vector> using namespace std; namespace sys{ class GeometricShape { public: GeometricShape(); GeometricShape(const GeometricShape& gs){}; GeometricShape& operator=(const GeometricShape& gs){} ; virtual vector<Point*> getPointsList() const = 0 ; virtual void setPointsList(vector<Point*> vec) = 0 ; virtual ~GeometricShape(){}; }; } #endif
Classe Polygon :
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 #ifndef POLYGON_HPP_ #define POLYGON_HPP_ #include "GeometricShape.h" using namespace std; namespace sys{ class Polygon : public GeometricShape { public: Polygon(void); Polygon(const Polygon& p); Polygon(vector<Point*> vec); Polygon& operator=(const Polygon& p); ~Polygon(void); void add(Point* p); Point& operator[](const int i); int getNbPoints() const; vector<Point*> getPointsList() const; void setPointsList(vector<Point*> vec); private : vector<Point*> _pointsList; }; } #endif
Classe Ellipse :
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 #ifndef ELLIPSE_HPP_ #define ELLIPSE_HPP_ #include "GeometricShape.h" namespace sys{ class Ellipse : public GeometricShape { public: Ellipse(void); Ellipse(Point* center, Point* width, Point* height); Ellipse(Point* center, Point* radius); // only for a center Ellipse(const Ellipse& ellipse); Ellipse& operator=(const Ellipse& e); ~Ellipse(void); Point* getWidth(); Point* getHeight(); Point* getCenter(); vector<Point*> getPointsList() const; void setPointsList(vector<Point*> vec); private : Point* _center; Point* _width; // largeur Point* _height; // hauteur }; } #endif
Quand je veux utiliser un attribut Geometric Shape dans une autre classe, j'ai l'erreur suivante :
Object.h:18: error: cannot declare parameter `pos' to be of type `sys::Geometric
Shape'
Object.h:18: error: because the following virtual functions are abstract:
GeometricShape.h:17: error: virtual void sys::GeometricShape::setPointsList(std
::vector<sys:: Point*, std::allocator<sys:: Point*> >)
extrait de ma classe Object :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Object { .... protected : int _id; GeometricShape _position; };
Partager