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

Langage C++ Discussion :

class abstraite et héritage


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut class abstraite et héritage
    Bonjour,
    J'ai une erreur que je n'arrive pas à résoudre:

    J'ai une class abstraite gérant les collision ressemblant a ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Objet
    {
    public:
     
        Objet();
        virtual ~Objet();
     
        virtual bool collision(Sphere* objet2) = 0;
        virtual bool collision(Boite* objet2) = 0;
     
    };
    Et des class Hérite ressemblant a ça:

    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
     
     
    class Sphere : public Objet
    {
      public:
     
        Sphere();
        virtual ~Sphere();
     
        virtual bool collision(Sphere* objet2);
        virtual bool collision(Boite* objet2);
     
    };
     
     
    class Boite : public Objet
    {
      public:
     
        Boite();
        virtual ~Boite();
     
        virtual bool collision(Sphere* objet2);
        virtual bool collision(Boite* objet2);
     
    };
    Et donc les collision sont tester dans une fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    void test_collision(std::vector<Objet*>& tab)
    {
      tab[2]->collision(tab[5]); //Cette ligne cause l'erreur
    }
    Et donc j'ai une belle erreur error: call of overloaded ‘collision(collision*&)’ is ambiguous

    Alors comment dire au compilo d'appeler la bonne fonction en fonction du type de la class fille ?


    Merci a tous qui me répondrons.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Soit tu as essayé de tellement simplifier ton code qu'il est totalement faux, soit il est juste totalement faux.

    D'où sortent i et j ?
    collision est à la fois le nom d'une classe et de méthodes
    tab est un vecteur de collision*, les méthodes collision ne prennent pas de collision* en paramètre mais boite* ou sphere*
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Déjà, je vois mal quiconque me regarder dans les yeux et me soutenir sans rougir qu'une sphere puisse... etre une collision ..

    Tu peux estimer que tes objets sont entourés d'une sphère et qu'ils rentrent en collision avec un autre dés que les sphères de deux objets se touchent, mais tu ne peux en aucun cas considérer qu'une sphère soit une collision !!!

    Peut etre n'as tu simplement pas choisi les bons termes, mais, d'un point de vue purement sémantique, il y a déjà un problème qui fait que ton héritage n'a, purement et simplement, pas de sens.

    Avant de faire quoi que ce soit d'autre, il serait des plus intéressant de réfléchir un peu à tes termes de manière à faire qu'il soit simplement sensé de vouloir faire hériter "quelque chose" de collision
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Bon j'ai changé un peu les noms

    tab est un vecteur de collision*, les méthodes collision ne prennent pas de collision* en paramètre mais boite* ou sphère*
    N’es ce pas l'intérêt de l’héritage ?

    Voila en espérant avoir éclairci les choses .

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    L'erreur est normale, collision prend un Sphere* ou une Boite* mais pas un Objet* .

    L'intérêt de l'héritage c'est d'abord de pouvoir réaliser une représentation de sa vue de l'esprit. Et c'est juste un mécanisme parmi tant d'autre.

    Regarde les design pattern Visiteur entre autre, ça semble être ce que tu cherches.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Regarde les design pattern Visiteur entre autre, ça semble être ce que tu cherches.
    Bon j'ai regardez vite fait , mais j'ai pas trop compris, enfin je vais sûrement continuer a lire.

    Enfin bref j'ai réglé mon problème en rajoutant dans les class fille une fonction surcharger prenant comme paramètre la class mère de cette façon :

    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
     
     
    class Sphere : public Objet
    {
      public:
     
        Sphere();
        virtual ~Sphere();
     
        virtual bool collision(Objet* objet2)
       {
        return objet2->collision(this);
       }
     
        virtual bool collision(Sphere* objet2);
        virtual bool collision(Boite* objet2);
     
    };

    Merci a vous deux pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classe abstraite et héritage
    Par SAKDOSS dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2009, 10h27
  2. Réponses: 17
    Dernier message: 27/08/2007, 18h35
  3. Erreur du designer avec héritage d'une classe abstraite
    Par Xzander dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2007, 00h36
  4. héritage et classes abstraites
    Par reloadead dans le forum Langage
    Réponses: 5
    Dernier message: 31/01/2007, 10h08
  5. Conception: héritage d'une classe abstraite
    Par Kikito dans le forum Langage
    Réponses: 19
    Dernier message: 05/10/2006, 17h36

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