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 :

Tableau et Classes dérivées


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut Tableau et Classes dérivées
    Bonjour à tous je suis nouveau sur le forum et je me suis inscrit pour essayer de trouver une solution à un problème.

    Je suis actuellement en IUT Informatique et je dois réaliser un projet (libre) en binôme et en c++.Nous avons choisi de faire un "Super puzzle fighter-like" en utilisant la librairie Allegro.
    (un lien pour voir le principe du jeu: http://www.playfrance.com/news-video...-hd-remix.html)

    Notre projet est déjà assez avancé et nous avions décidé d'utiliser un tableau 2d c++ pour gérer des pointeurs de briques,le tableau représentant la surface de jeu.
    Nous avions donc une seule classe Brique avec un attribut "type" pour différencier les différents types de briques.(3 au total)

    Seulement notre prof( après une première démonstration) nous a demandé de faire des classes dérivées pour chaque type de brique.

    Mes questions sont donc les suivantes :y'a t'il un moyen d' utiliser le tableau de la même manière qu'avant le changement de conception? (sachant que nous avons déjà ecrit un grand nombre de fonctions utilisant le tableau et le type dans la Brique)

    le seul moyen (hypothétique) que j'ai trouvé mais qui ne me satisfait pas vraiment est de faire 3 classes dérivées les unes par rapport aux autres et de faire un tableau contenant des pointeurs de la classe la plus dérivée (qui pourrait du coup aussi pointer vers des objets de classes moins dérivées).

    Je veux en fait savoir si il vaut mieux tout reprendre à zéro à cause de ce changement de conception où si il y'a un moyen de s'en sortir sans trop de "bidouillages".

    J'espère avoir été assez clair même si c'est difficile de tout expliquer quand on a le nez dans son projet, et je remercie d'avance toutes les personnes qui prendront le temps de me lire voire de me répondre.

  2. #2
    Membre expérimenté Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Par défaut
    Bienvenue,

    le seul moyen (hypothétique) que j'ai trouvé mais qui ne me satisfait pas vraiment est de faire 3 classes dérivées les unes par rapport aux autres et de faire un tableau contenant des pointeurs de la classe la plus dérivée (qui pourrait du coup aussi pointer vers des objets de classes moins dérivées).
    Ce que tu racontes est un peu confus, mais je pense que tu es en train de te tromper.

    Une instance d'une classe dérivée peut se faire passer pour une instance de la classe mere mais pas le contraire.

    En consequence voila comment faire :

    Une classe mere : Brique qui contient des methodes virtuelles

    3 classes filles qui redéfinissent les méthodes de la classe mére (polymorphisme):
    Brique1 dérive de Brique
    Brique2 dérive de Brique
    Brique3 dérive de Brique

    Ensuite ton tableau reste un tableau de Brique* qui appellent les méthodes connues de tous et donc idéalement tu n'as pas besoin de savoir quel est le véritable type de ta brique. Si a un moment tu as besoin de savoir a quelle classe dérivée tu as affaire, il suffira d'utiliser dynamic_cast

  3. #3
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut
    Citation Envoyé par Ksempac
    Bienvenue,

    Une instance d'une classe dérivée peut se faire passer pour une instance de la classe mere mais pas le contraire.
    Je l'avais bien compris dans ce sens la mais j'ai eu en effet du mal à l'exprimer..

    Dans ton exemple la Classe mère est-elle purement virtuelle ?(ou cela n'a -til aucune importance?) Est-ce que je pourrais accéder à toutes les fonctions et attributs des briques dérivées une fois qu'elles seront dans le tableau?

    Sinon merci pour le dynamic_cast je ne connaissais pas mais je vais faire des recherches c'est exactement ce qu'il me faut.Et merci pour ta réponse claire et rapide!

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Parfois, revoir la conception n'est pas forcément repartir de zéro!!!
    Certes, ça fait changer complétement son fusil d'épaule, mais c'est pour le bien de ton application!
    -> voir modularité sur !!!

  5. #5
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut
    Citation Envoyé par poukill
    -> voir modularité sur !!!
    c'est très interessant comme notion et c'est sur que je ne vais pas complètement repartir de zero vu que je sais déjà comment implanter les fonctionnalités de mon projet (du moins dans les grandes lignes) avec le travail que j'ai fait précedemment. C'est plus de la réadaptation...
    Sinon est-ce quelqu'un pourrait m'éclaircir sur mes deux questions précedentes avant que j'attaque vraiment le changement?

    Dans ton exemple la Classe mère est-elle purement virtuelle ?(ou cela n'a -til aucune importance?) Est-ce que je pourrais accéder à toutes les fonctions et attributs des briques dérivées une fois qu'elles seront dans le tableau?

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Dans ton exemple la Classe mère est-elle purement virtuelle ?(ou cela n'a -til aucune importance?)
    Ca n'a aucune importance.

    Est-ce que je pourrais accéder à toutes les fonctions et attributs des briques dérivées une fois qu'elles seront dans le tableau?
    Avec un dynamic_cast (pour peu que tu connaisses le type dérivé), mais le but est justement d'éviter ça. Normalement tu devrais pouvoir t'en tirer avec les fonctions virtuelles uniquement, sans connaître le détails des classes dérivées.

  7. #7
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut
    Avec un dynamic_cast (pour peu que tu connaisses le type dérivé), mais le but est justement d'éviter ça. Normalement tu devrais pouvoir t'en tirer avec les fonctions virtuelles uniquement, sans connaître le détails des classes dérivées.
    d'accord donc pour accéder aux attributs j'utilise juste des accesseurs ?

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Oui
    C'est le principe du polymorphisme : posséder une référence, un pointeur vers une instance de classe assez générale. Avec ce pointeur, tu vas manipuler en fait une classe dérivée, qui est le "vrai" objet en question.

  9. #9
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut
    D'accord j'ai donc saisi tout ce dont j'avais besoin pour continuer merci beaucoup pour vos réponses rapides et précises!

  10. #10
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    n'oublie pas le !!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2014, 00h09
  2. Suppression d'un tableau de classe de la memoire
    Par jhary07 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 14/11/2005, 08h23
  3. tabeau de classe = tableau de classe
    Par Bason_sensei dans le forum C++
    Réponses: 25
    Dernier message: 12/10/2005, 13h01
  4. [MFC] CArray et classe dérivée?
    Par TigreRouge dans le forum MFC
    Réponses: 14
    Dernier message: 02/08/2005, 22h45
  5. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 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