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 :
- #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 :
- #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 :
- #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 :
- class Object {
- ....
- protected :
- int _id;
- GeometricShape _position;
- };
|