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 :

[C++] Héritage, classes et tableaux


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut [C++] Héritage, classes et tableaux
    Bonjour à tous,

    Dans le cadre de mon programme, j'ai crée une classe ennemie mère et 2 classes filles qui hérite de la classe ennemie :
    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
     
    // classe mère
    class ennemie()
    {
       // attribues et contructeurs
    };
     
    // classes filles
    class guerrier : public ennemie
    {
          // attribues et contructeurs    
    };
    class magicien : public ennemie
    {
          // attribues et contructeurs    
    };
    Jusqu'à la tout va bien

    Maintenant j'ai créé un tableau d'ennemies grave au template vector :
    Puis j'ai ajouté un magicien et un guerrier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab.puish_back(new guerrier());
    tab.push_back(new magicien());
    Maintenant je décide de récupéré le premier élément de mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ennemie* toto = tab[0];
    Et là je suis coincé !

    Comment savoir si cet ennemie est un guerrier ou un magicien ?

    En effet, j'ai besoin d'accéder aux fonctions spécifiques des classes filles en fonction du type d'ennemies...

    Comment faire ?

    Merci
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par Aspic Voir le message
    En effet, j'ai besoin d'accéder aux fonctions spécifiques des classes filles en fonction du type d'ennemies...
    Tu ne devrais pas avoir à faire ce test. Revoir ton design me parait de mise.
    Sinon, si t'aime le crados : dynamic_cast

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par Joel F Voir le message
    Tu ne devrais pas avoir à faire ce test. Revoir ton design me parait de mise.
    Sinon, si t'aime le crados : dynamic_cast
    Mince, comment dois je m'y prendre pour stocker tous mes types d'ennemies dans un unique tableaux et activer les "effets spécifiques" à chaque ennemies ?

    En gros, comment faire un "'SI ennemie dans mon tableau est de type GUERRIER alors frapper() SINON SI il est de type MAGICIEN alors lancerBouleDeFeu() ..."

    PS : J'aime pas le crados mais de toute manière ca ne marcherais pas car guerrier hérite de ennemie donc un guerrier* toto2 = dynamic_cast<guerrier*> (toto); plante ^^
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Des fonctions virtuelles ?

    virtual void DoAction()=0; dans ennemies.hpp résoudrait tes problèmes.

  5. #5
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par NoIdea Voir le message
    Des fonctions virtuelles ?

    virtual void DoAction()=0; dans ennemies.hpp résoudrait tes problèmes.
    Mais je vais pas coder toutes les fonctions spécifique à un type d'ennemie en virtual dans la classe ennemie ? (Ex : virtual void lancerBouleFeu() dans ennemie.cpp n'a pas de sens car seul certains type d'ennemies peuvent faire cette action...

    Ou alors j'ai mal compris
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Une fois que tes objets sont dans le même vecteur, il faut les traité de manière identique :
    Si par exemple attaquer pour un guerrier, c'est frapper et que pour un magicien c'est lancer une boule de feu, alors il faut implémenter virtual void Attaquer() dans ennemies.
    Pour se défendre, le magicien va peut-être fuir et le guerrier utiliser son bouclier donc, virtual void SeDefendre().
    Il ne devrait pas il y avoir tant de fonction à implémenter que sa...
    Si tu nous en disais plus.

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

Discussions similaires

  1. problème (héritage || class || constructeur )?
    Par crazy_inf dans le forum C++
    Réponses: 3
    Dernier message: 29/06/2008, 22h07
  2. Héritage, classe virtuelle
    Par Anium dans le forum C++
    Réponses: 3
    Dernier message: 21/05/2008, 09h18
  3. Héritage, classe de base
    Par Melem dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 25/02/2008, 15h45
  4. Héritage classe template->classe template
    Par zabibof dans le forum Langage
    Réponses: 5
    Dernier message: 11/08/2007, 11h05
  5. Réponses: 5
    Dernier message: 10/01/2007, 02h08

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