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 :

2D hérite de 3D


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut 2D hérite de 3D
    Élou!

    Je voulais savoir ce que vous pensez de cette idée de conception. J'ai fait une classe de vecteurs 3D et je voulais savoir si c'était une bonne idée de faire une sous-classe de vecteurs 2D. I.e "Vecteur 2D est-un vecteur 3D sans coordonnée z?"
    Si oui, comment interdire l'utilisation de certaines méthodes comme le produit vectoriel qui n'a pas de sens mathématique en 2D. Je vous met juste les attributs de ma classe 3D

    Merci d'avance !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef double type; ///Dans le cas ou on desire echanger le type des vecteurs
     
    class Vecteur3D
    {
    private:
        std::vector<type> mCoord;/// un seul attribut. de type vector pour que les coords soient bien organisées
     
    public:
     
    ///CONSTRUCTEUR
        Vecteur3D(type x=0, type y=0, type z=0);//initialise 1 vec

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Salut!

    Pourquoi un std::vector, plutôt qu'un std::array?
    Ca te permettrait de changer ta classe comme ceci:
    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
    template< size_t Count >
    class Vecteur
    {
    private:
        std::array<type, Count> mCoord;/// un seul attribut. de type array pour que les coords soient bien organisées
     
    public:
     
    ///CONSTRUCTEUR
        template< typename ... T >
        Vecteur( T x, T y, T ... params );//initialise 1 vec
     
    /// Fonctions membres
    ...
    ///
    };
     
    using Vecteur3D = Vecteur< 3 >;
    using Vecteur2D = Vecteur< 2 >;
    Par contre, pour les opérations type produit vectoriel, il faudrait alors les mettre en fonctions libres, plutôt qu'en fonctions membres (ce que je préfère, personnellement, mais à toi de voir).
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message

    Pourquoi un std::vector, plutôt qu'un std::array?
    Parce que je me suis lancé sur cette conception et c'est bien trop tard pour changer. (de plus, le type vector me semblait approprié pour des vecteurs )
    Citation Envoyé par dragonjoker59 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template< size_t Count > ...
    Je ne sais pas encore ce que sont les templates bientôt ça viendra. Je ne peux pas mettre mon code car c'est un projet et je risquerais de me ramasser un 0 pour triche (ça ne m'étonnerais pas que mon prof soit membre voir même admin de ce site. XD )
    Qu'elle est la différence entre fct. memebre et libre?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ai l'impression qu'on tombe en plein dans le problème cercle-ellipse, là.

    Personnellement je ferais deux classes séparées, mais avec un opérateur de conversion (implicite dans le sens 2D->3D, explicite dans l'autre).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    vecteur et vector, mis à part la traduction, n'ont rien à voir
    l'un est un objet mathématique, un agglomérat de 3 données, l'autre une collection d'objets à taille dynamique
    utiliser vector pour représenter internement un vecteur.. pourquoi pas, mais avoir 3 membres x,y,z serait bien plus clair et simple à utiliser; et le seul "avantage" de la contiguité des données est strictement identique, plus on enlève une indirection donc un accès plus immédiat à celles-ci
    d'ailleurs nul besoin de class et autant utiliser struct puisque tous les membres ont vocation à être accessibles/utilisables; si tu veux qu'ils le soient en lecture seulement, tu dois passer le vecteur en const
    l'héritage est d'ailleurs pas des meilleures pratiques pour ce genre d'objet, mais rien ne t'empêche d'utiliser un vector3 en lieu et place d'un vector2 et de juste ignorer sa composante z; et de ne pas du tout avoir de type Vector2 dans ton code
    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
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut Dacc
    ok merci! je vais donc juste ignorer la composante z. Juste pour info, je devais faire une classe vecteur. Cela fait parti de mon apprentissage avec des méthodes, surcharge d'opérateur et tout et tout

  7. #7
    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
    Citation Envoyé par DanFire Voir le message
    "Vecteur 2D est-un vecteur 3D sans coordonnée z?"
    Plus le temps passe, et moins j'aime ce "est-un", qui veut tout dire et ne rien dire...

    Pour savoir si un héritage est valide, il faut se référer au principe de substitution de Liskov, qui est plus précis : Est-ce que partout où tu peux passer un Vecteur3D, tu peux lui substituer un Vecteur2D et que ça se passe bien ? Est-ce que partout où tu retournes un Vecteur3D, tu peux retourner un Vecteur2D et que ça se passe bien ? Si oui, ça peut avoir du sens de faire dériver Vecteur2D de Vecteur3D.

    Et tu as déjà répondu à cette question : Non, ça n'a pas de sens, puisque tu voudrais interdire certaines opérations...
    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.

  8. #8
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Plus le temps passe, et moins j'aime ce "est-un", qui veut tout dire et ne rien dire...
    Une personne m'avait dit préférer « se comporte comme ». Sans trop de réflexion, ça m'avait assez plu.

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

Discussions similaires

  1. Ma classe fille n'hérite pas de sa classe mère
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2005, 12h49
  2. Réponses: 7
    Dernier message: 25/03/2005, 14h05
  3. Réponses: 14
    Dernier message: 14/03/2005, 09h16
  4. [Interface] Appeller toutes les méthodes héritées d'un class
    Par thibaut.d dans le forum Général Java
    Réponses: 4
    Dernier message: 25/01/2005, 08h42
  5. question sur les requetes table héritée
    Par champion dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 30/08/2004, 14h19

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