Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2785 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  héritage et méthodes virtuelles ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

héritage et méthodes virtuelles ?

n°1654882
Didine981
Posté le 08-12-2007 à 11:54:30  profilanswer
 

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 :
  1. #ifndef GEOMETRICSHAPE_HPP_
  2. #define GEOMETRICSHAPE_HPP_
  3. #include "Point.h"
  4. #include <vector>
  5. using namespace std;
  6. namespace sys{
  7. class GeometricShape
  8. {
  9. public:
  10. GeometricShape();
  11. GeometricShape(const GeometricShape& gs){};
  12. GeometricShape& operator=(const GeometricShape& gs){} ;
  13. virtual vector<Point*> getPointsList() const = 0 ;
  14. virtual void setPointsList(vector<Point*> vec) = 0 ;
  15. virtual ~GeometricShape(){};
  16. };
  17. }
  18. #endif


 
 
Classe Polygon :  

Code :
  1. #ifndef POLYGON_HPP_
  2. #define POLYGON_HPP_
  3. #include "GeometricShape.h"
  4. using namespace std;
  5. namespace sys{
  6. class Polygon : public GeometricShape
  7. {
  8. public:
  9. Polygon(void);
  10. Polygon(const Polygon& p);
  11. Polygon(vector<Point*> vec);
  12. Polygon& operator=(const Polygon& p);
  13. ~Polygon(void);
  14. void add(Point* p);
  15. Point& operator[](const int i);
  16. int getNbPoints() const;
  17. vector<Point*> getPointsList() const;
  18. void setPointsList(vector<Point*> vec);
  19. private :
  20. vector<Point*> _pointsList;
  21. };
  22. }
  23. #endif


 
 
Classe Ellipse :  

Code :
  1. #ifndef ELLIPSE_HPP_
  2. #define ELLIPSE_HPP_
  3. #include "GeometricShape.h"
  4. namespace sys{
  5. class Ellipse : public GeometricShape {
  6. public:
  7. Ellipse(void);
  8. Ellipse(Point* center, Point* width, Point* height);
  9. Ellipse(Point* center, Point* radius); // only for a center
  10. Ellipse(const Ellipse& ellipse);
  11. Ellipse& operator=(const Ellipse& e);
  12. ~Ellipse(void);
  13. Point* getWidth();
  14. Point* getHeight();
  15. Point* getCenter();
  16. vector<Point*> getPointsList() const;
  17. void setPointsList(vector<Point*> vec);
  18. private :
  19. Point* _center;
  20. Point* _width; // largeur
  21. Point* _height; // hauteur
  22. };
  23. }
  24. #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 :
  1. class Object {
  2. ....
  3. protected :
  4. int _id;
  5. GeometricShape _position;
  6. };

mood
Publicité
Posté le 08-12-2007 à 11:54:30  profilanswer
 

n°1654924
IrmatDen
Posté le 08-12-2007 à 13:27:29  profilanswer
 

Salut,
 
Les classes virtuelles abstraites ne peuvent s'utiliser que par un pointeur, et lors de leur création, tu ne peux créer qu'une de leur classes dérivées.

n°1654925
Ace17
Posté le 08-12-2007 à 13:31:25  profilanswer
 

IrmatDen a écrit :

Salut,
Les classes virtuelles abstraites ne peuvent s'utiliser que par un pointeur


... ou par une reference.
 

n°1655005
bjone
Insert booze to continue
Posté le 08-12-2007 à 17:04:07  profilanswer
 

void setPointsList(vector<Point*> &vec) peut pas faire de mal.
 
par contre tes:
GeometricShape();
GeometricShape(const GeometricShape& gs){};
GeometricShape& operator=(const GeometricShape& gs){} ;
 
n'ont pas de sens, il vaut mieux un:
vitrual GeometricShape *clone() = 0;

n°1655080
Taz
bisounours-codeur
Posté le 08-12-2007 à 22:06:00  profilanswer
 

les ; :o
Mais effectivement, ça sert à rien de les définir ici, surtout comme ça.

n°1655161
Amonchakai
Posté le 09-12-2007 à 09:23:13  profilanswer
 

Un destructeur virtuel ça peut être bien aussi non ?
Je sais pas ce qu'il y a au niveau de GeometricShape mais je pense que ça peut pas faire de mal...

n°1655195
Ace17
Posté le 09-12-2007 à 11:34:10  profilanswer
 

Amonchakai a écrit :

Un destructeur virtuel ça peut être bien aussi non ?
Je sais pas ce qu'il y a au niveau de GeometricShape mais je pense que ça peut pas faire de mal...


il y est le destructeur virtuel au niveau de GeometricShape. Je ne vois pas ce que tu veux dire...

n°1655249
Amonchakai
Posté le 09-12-2007 à 14:02:15  profilanswer
 

ha oui, pardon j'avais mal lu...
Par contre j'aurai aussi mis virtuel le destructeur d'Ellipse


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  héritage et méthodes virtuelles ?

 

Sujets relatifs
Problème avec héritage et méthode virtuellePblm héritage et méthode "sans" argument...
Visibilité de méthodes dans une classe interneCreation de Méthodes java a la volée
Heritage et surdéfinition...Problème d'héritage multiple
[AspectJ] pointcut pour intercepter des méthodes[Résolu] heritage des fauilles de styles
Implémentation des méthodes dans un fichier séparé, possible?[C++] Question sur l'héritage et la surcharge de méthodes virtuelles.
Plus de sujets relatifs à : héritage et méthodes virtuelles ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR