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 :

methodes virtuelles+encapsulation+heritage = complexe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut methodes virtuelles+encapsulation+heritage = complexe
    Salut à tous,

    J'ai besoin d'un coup de main en C++, car je voudrais réaliser un simulateur de trajectoire. Je m'explique je voudrais une classe mère Trajectoire sachant qu'une trajectoire peut être LigneDroite, Sinusoidale, Cercle, Bezier, etc...

    Donc lorsque je créer mes objets qui se déplaceront je ne sais pas à l'avance quelle trajectoire ils suivront. Donc je leur donnerait juste un parametre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trajectoire * mTrajectoire;
    Puis lors de l'initialisation (dans l'init) je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mTrajectoire = new LigneDroite();
    Mais le problème c'est que pour initialiser une ligne droite, on peut donner deux points, le point de départ et le point de destination. Ou alors un point de depart et un angle.
    Par contre pour initialiser un cercle, il faut donner le rayon, le point central et la vitesse de rotation par exemple.

    Donc en gros pour initialiser ces trajectoires, il faut donner des paramètres différents, donc comment peut-on procéder en C++ à l'élaboration d'une structure précise pour cet exemple de trajectoire.

    Merci d'avande pour votre aide, elle me sera d'une grande utilité

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Là où tu crées ta trajectoire, tu sais exactement de quelle trajectoire il s'agit. Donc, logiquement, tu connais aussi les paramètres associés. Passe-le donc en paramètres aux divers constructeurs.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    modelise tes trajectoires en objets,

    Liste tes objets, trouve les données communes, etablie les specificitées de chaque type d objet, hierarchise les entres eux. Ensuite tu peux t attaquer aux metodes...

    Et par la suite quand ton modèle est bon, passe à l 'implementation proprement dite.


    Pour etre plus pragmatique : les objets qui se deplacent doivent comporter un objet trajectoire génerique avec des methodes virtuelles dont l'implementation differeras suivant la nature de la trajectoire (polymorphisme). Reste à instancier le bon type de trajectoire... et le tour est joué

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Ben oui justement c'est ca le problème, c'est que suivant le type de trajectoire il faut donner des types de données differents.

    Pour cercle il faut : Vecteur centre, float rayon, float angleDepart
    Pour bezier il faut : int nbPoints, CVecteur ** lesPoints

    Donc on ne peut point faire une initialisation avec tous ses parametres puisque selon le type de trajectoire a initialiser, il faut donner un nombre de parametres differents et des types differents.
    Donc je vois mal comment on pourrait faire pour faire une initialisation commune.

    Donc ce que j'ai fait, mais c'est vrai que c'est pas très propre, c'est de déclarer une fonction d'inialisation de chaque type (cerlce, ligne droite, bezier, etc..) dans la classe abstraite Trajectoire, comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Trajectoire
    {
      public :
        	virtual void initC(CVecteur* center, float radius, float angle, float periode) = 0;
    	virtual void initLD(CVecteur* _posDepart, CVecteur* _posDestination, float _nbSec) = 0;
    };
    Mais le souci c'est qu'il faut ajouter à chaque fois les nouvelles fonctions d'inialisation dans la classe Trajectoire, et aussi redefinir les autres dans chaque classe LigneDroite, ou Cercle (qui ne l'utilisent pas), par exemple : il faut que je redefinisse le initC(param...) dans la classe LigneDroite et ne rien mettre dedans.

    Il y t'il un autre moyen de faire autrement et plus simple.

  5. #5
    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
    Je ne comprends pas pourquoi tu peux connaître ces paramètres plus tard lorsque tu manipules un Trajectoire*, et pas avant lorsque tu construis l'instance de la classe dérivée.
    En tout cas ce n'est pas normal (et accessoirement très crade comme solution ).

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Par défaut
    Comment ca c'est pas normal.

    C'est vrai que pour certains objets je connais la trajectoire à l'avance (et est fixe par exemple LigneDroite), mais pour d'autres à un temps donné t on peut l'initialiser avec une LigneDroite et puis lorsque c'est fini enchaîner juste après avec une trajectoire sinusoidale puis ensuite avec eventuellement un Cercle, etc...).

    Donc la trajectoire de l'objet dépend du temps et du comportement du joueur. C'est pour ca que je voudrai créer un Trajectoire pour les objets qui se déplacent afin d'utiliser seulement lorsque j'ai besoin la trajectoire dont j'ai besoin.

    Pour etre plus précis c'est pour un jeu de shoot, les vaisseaux suivent une trajectoire mais dès fois on ne peut pas le connaître à l'avance ou alors ca peut être aléatoire.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/02/2007, 15h29
  2. Réponses: 2
    Dernier message: 20/10/2006, 15h07
  3. [debutant] probleme avec methode virtuelle pure
    Par Treuze dans le forum Débuter
    Réponses: 10
    Dernier message: 21/04/2006, 12h58
  4. Réponses: 19
    Dernier message: 10/02/2005, 22h43
  5. [Language] Méthodes virtuelle ?
    Par Eltaz dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2005, 21h43

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