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 :

Coût d'un héritage


Sujet :

C++

  1. #1
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut Coût d'un héritage
    Bonjour à vous !

    Que me "coûte" un héritage sur une classe, d'une structure composée de quelques types primitifs (ça à peut-être une importance)

    J'essais en fait de composer les membres d'une classe avec des templates.
    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
    27
    28
    29
    30
    31
    //==============================================================================
    enum ValueTag : uint8_t
    {
        POS = 0,
        SIZE,
        SCALE,
        TEXTURE
    };
    //------------------------------------------------------------------------------
    enum class TextureTag;
    //==============================================================================
    template<uint8_t value_tag> struct Value {};
    //------------------------------------------------------------------------------
    template<> struct Value<POS> { int posx; int posy; };
    template<> struct Value<SIZE> { int width; int height; };
    template<> struct Value<SCALE> { uint8_t scale; };
    template<> struct Value<TEXTURE> { TextureTag texture_tag; };
    //==============================================================================
    template<uint8_t... TagTail> 
    struct Entity : public Value<TagTail>... 
    {};
    //==============================================================================
    int main()
    {
        Entity<POS, SCALE, TEXTURE> entity;
        entity.posx = 3;
        entity.scale = 3;
        ...
        return 0;
    }
    //==============================================================================
    C'est sans doute plus onereux, j'imagine que l'accès aux membres passe par la classe de base puis par l'hérité en question.
    J'espere me tromper !

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Ben non, aucun coût particulier, le compilateur générera la même code que si tu avais fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    struct EntityPOSSCALETEX
    {
       Value<POS> pos;
       Value<SCALE> scale;
       Value<TEXTURE> texture;
    }
     
     EntityPOSSCALETEX entity;
     entity.pos.posx = 3;
     entity.scale.scale = 3;
    D'ailleurs tu peux le vérifier en dumpant le contenu en octet, la classe avec héritage aura le même layout que la classe avec des membres.

  3. #3
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Merci bien Arzar !

    Par contre je ne comprends pas le sens de "dumper un contenu", y t'il un autre terme ou un lien pour expliquer ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Typiquement, cela veut dire "faire un dump hexadécimal+ASCII à partir de l'adresse où se trouve la structure".
    Tout debugger qui se respecte possède une option pour regarder une zone arbitraire de la mémoire du processus débogué sous cette forme.
    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
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Parfait, merci beaucoup !

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

Discussions similaires

  1. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  2. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  3. [Concept] Curseur coté client et curseur coté serveur
    Par freud dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/09/2002, 22h13
  4. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44
  5. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52

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