IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

héritage et méthodes virtuelles ?


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 62
    Par défaut héritage et méthodes virtuelles ?
    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;
    };

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Et oui, le compilateur ne peut pas deviner que tu ne vas affecter à pos que des polygones ou des ellipses mais tu peux lui dire que pos va pointer sur un GeometricShape et il ne se plaindra plus.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 62
    Par défaut oui
    j'ai changé ça, j'ai bien mis un pointeur mais j'ai toujours des erreurs à la compilation .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ellipse.o:Ellipse.cpp:(.text+0x10d): undefined reference to `sys::GeometricShape
    ::GeometricShape()'

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Tu as défini GeometricShape::GeometricShape () dans l'implémentation de ta classe GeometricShape ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 62
    Par défaut Résolu
    C'est bon, en fait c'était des problèmes d' include..

Discussions similaires

  1. méthode virtuelle dans héritages
    Par bobby51 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2010, 19h36
  2. héritage et méthode virtuelle
    Par cibatro dans le forum Langage
    Réponses: 11
    Dernier message: 28/07/2009, 17h13
  3. méthode virtuelle pure et héritage
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2009, 22h12
  4. [Héritage] Downcasting et méthodes virtuelles
    Par poukill dans le forum C++
    Réponses: 8
    Dernier message: 16/07/2007, 13h38
  5. Exceptions, héritage et méthodes virtuelles
    Par Nuwanda dans le forum C++
    Réponses: 13
    Dernier message: 23/05/2006, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo