[C++] probleme conversion entre deux objets héritage
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

[C++] probleme conversion entre deux objets héritage



  1. #1
    mrgrobe

    [C++] probleme conversion entre deux objets héritage


    ------

    Bonjour,

    J'ai un probléme sur ce code, qui me donne une erreur de conversion normale mais je ne sais pas comment modifier pour que ça marche.

    Classes.h :
    Code:
    #include <iostream>
    #include <string>
    using namespace std ;
    
    class Forme{
    protected:
        double x;
        double y;
    public:
        Forme(double _x=0.0, double _y=0.0){x=_x;y=_y;}
        virtual void affiche()=0;void deplace(double dx,double dy){x=x+dx;y=y+dy;}
    };
        
    class Point:public Forme{
    public:
        Point(double _x=0.0, double _y=0.0):Forme(_x,_y){}
        virtual void affiche() {cout<<"Affiche point x="<<x<<" y="<<y<<endl;}
    };
    
    class Cercle:public Point{
    protected:
        double rayon;
    public:
        Cercle(double _x, double _y, double _r):Point(_x,_y){rayon=_r;}
        virtual void affiche(){cout<<"Affiche Cercle x="<<x<<" y="<<y<<" r="<<rayon<<endl;}
    };
    
    class Sphere:public Cercle{
    protected:
        double z;
    public:
        Sphere(float _x, float _y, float _z, float _r):Cercle(_x,_y,_r){z=_z;}
        virtual void affiche(){cout<<"Affiche Sphere"<<" x="<<x<<" y="<<y<<" z="<<z<<" rayon="<<rayon<<endl;}
        void deplace(double dx, double dy, double dz){
            Cercle::deplace(dx,dy);z=z+dz;
    }
    };
    main :
    Code:
    #include <iostream>
    #include <string>
    #include "Classes.h"
    using namespace std ;
    
    int main()
    {
      Forme F(2.1, 3.2);
      Cercle C(4.2,5.3,5.0);
      Sphere *PSphere;
      Cercle *PCercle;
      PCercle = &C;
      PSphere = PCercle;
      PSphere->affiche();
      return 0;
    }
    Ce qui me retourne "invalid conversion from 'cercle*' to 'sphere*'.
    Comment faire pour régler ce probléme ?

    Merci d'avance !

    -----

  2. #2
    pm42

    Re : [C++] probleme conversion entre deux objets héritage

    Normal une sphère est un cercle dans ton héritage, pas le contraire.
    Et quand tu écris
    Code:
    PSphere = PCercle;
    , tu essaies de transformer un cercle en sphère.

    Ton PSphere va pointer sur un cercle : il va trouver l'attribut z où ?

  3. #3
    Paraboloide_Hyperbolique

    Re : [C++] probleme conversion entre deux objets héritage

    Bonjour,

    Sinon, on peut ajouter à la classe Sphere un constructeur qui prend en argument un cercle. Il faut alors décider ce que vaut z (0 ?).

  4. #4
    pm42

    Re : [C++] probleme conversion entre deux objets héritage

    Citation Envoyé par Paraboloide_Hyperbolique Voir le message
    Sinon, on peut ajouter à la classe Sphere un constructeur qui prend en argument un cercle. Il faut alors décider ce que vaut z (0 ?).
    Je ne suis pas sur que cela fonctionne sur une affectation de pointeurs.

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : [C++] probleme conversion entre deux objets héritage

    Personnellement, je m'étonne de la ligne.
    Code:
      Forme F(2.1, 3.2);
    étant donné que la classe Forme est abstraite.

    Pour le problème d'héritage, on peut faire un cast:
    Code:
       PSphere = (Sphere*)PCercle;
    mais du coup le résultat escompté ne sera pas le bon puisque c'est la fonction affiche de la classe cercle qui sera appelée dans la ligne
    Code:
    PSphere->affiche();

  7. #6
    Fustigator

    Re : [C++] probleme conversion entre deux objets héritage

    Quelque chose pique les yeux dans la conception et me fait m'interroger sur la compréhension de l'héritage par le PO.

    L'héritage n'est pas une facilité technique, mais un mécanisme conceptuel.

    Partant de là, peut on savoir pourquoi Cercle hérite de Point ?
    Il devrait avoir une propriété de type Point, d'accord mais pourquoi en hérite-t-il ? Ca n'a pas trop de sens.

    edit :idem pour Point qui hérite de Forme.
    Dernière modification par Fustigator ; 08/05/2020 à 16h09.

  8. #7
    Jack
    Modérateur

    Re : [C++] probleme conversion entre deux objets héritage

    Pas faux!

    J'aurais plutôt vu une composition (au sens d'UML)

  9. #8
    pm42

    Re : [C++] probleme conversion entre deux objets héritage

    Citation Envoyé par Fustigator Voir le message
    Quelque chose pique les yeux dans la conception et me fait m'interroger sur la compréhension de l'héritage par le PO.
    L'héritage n'est pas une facilité technique, mais un mécanisme conceptuel.
    Partant de là, peut on savoir pourquoi Cercle hérite de Point ?
    Bien sur mais on aurait pu aborder le sujet avec lui s'il était revenu.

  10. #9
    Fustigator

    Re : [C++] probleme conversion entre deux objets héritage

    Citation Envoyé par Jack Voir le message
    Pas faux!

    J'aurais plutôt vu une composition (au sens d'UML)
    Je n'ai pas parlé d'UML parce que je ne sais pas ce que le PO en sait ou pas.
    J'ai donc préféré exprimer les choses de manière "concréte".
    Dernière modification par Fustigator ; 08/05/2020 à 18h14.

  11. #10
    Fustigator

    Re : [C++] probleme conversion entre deux objets héritage

    Citation Envoyé par pm42 Voir le message
    Bien sur mais on aurait pu aborder le sujet avec lui s'il était revenu.
    Sur 2 jours dont 1 férié il a encore le temps de revenir.

  12. #11
    Jack
    Modérateur

    Re : [C++] probleme conversion entre deux objets héritage

    Citation Envoyé par Fustigator Voir le message
    Je n'ai pas parlé d'UML parce que je ne sais pas ce que le PO en sait ou pas.
    J'ai donc préféré exprimer les choses de manière "concréte".
    Oui, je n'ai parlé d'UML que pour le côté formel. Bref, un bon vecteur de points ferait l'affaire pour commencer.

Discussions similaires

  1. Fréquence de collision entre deux objets
    Par Ecthelion dans le forum Physique
    Réponses: 20
    Dernier message: 27/03/2013, 19h40
  2. Impacte entre deux objets
    Par invitee8152693 dans le forum Physique
    Réponses: 7
    Dernier message: 18/01/2011, 18h52
  3. Garder une distance entre deux objets
    Par invite95b1f743 dans le forum Électronique
    Réponses: 20
    Dernier message: 12/10/2010, 05h52
  4. Interférences entre deux objets.
    Par invite0ec3224b dans le forum Physique
    Réponses: 3
    Dernier message: 18/01/2010, 07h26
  5. Choc entre deux objets
    Par invite82936bcc dans le forum Physique
    Réponses: 1
    Dernier message: 21/04/2009, 22h13