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 :

Structures et Héritages - Explications


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut Structures et Héritages - Explications
    Bonjour à tous,

    J'essaie de transposer un code C++ vers un autre langage et j'ai besoin d'informations.
    Pour ce post, il s'agit des structure et leurs déclarations lorsqu'il s'agit d'héritage.

    J'aune déclaration simple d'une structure dans un header :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Structure_1
    {
        DWORD   dwSize;    
        DWORD   dwVersion; 
        DWORD   dwID;      
    };
    et une autre déclaration de structure avec un héritage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Structure_2 : public Structure_1
    {
        DWORD   dwRequestID;
        DWORD   dwObjectID;
        DWORD   dwDefineID;
        DWORD   dwFlags;
    };
    J'aurais voulu comprendre quelle sera la structure finale pour Structure_2 ?
    Quel est le but de cet héritage et comment cela fonctionne ?

    Le but est de savoir et comprendre comment faire la déclaration dans mon langage. Je ne parle pas de mon langage car mon post risque d'être déplacé alors que c'est bien une question purement C++.

    Pour ceux qui veulent savoir d'où je tire cet exemple, c'est dans le header d'une API SimConnect.dll (SimConnect.h)

    Merci à tous.

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Bonjour Bousk,

    Merci pour votre réponse

    Je vois que vous avez su utiliser la recherche dans tous le forum, mais je l'avais déjà fait sans avoir de réponse appropriée à ma question.

    En effet on parle beaucoup du principe d'héritage orienté vers les classes.

    Mon cas est basé sur les structures et mes questions sont plus précises car il me faut savoir comment je déclare mes structures dans le langage qui est le WLangage. Même en lisant tous les liens proposés, je ne sais toujours pas comment vais-je déclarer mes structures en WLangage.

    Merci encore en espérant avoir d'autres réponses intéressantes sur mes questions précises.

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Donc il faudrait quelqu'un qui connait C++ et WLanguage (WinDev ?) pour te faire un crash course sur le C++ ? Avec ou sans Mars ?
    La différence entre class et struct est minime. Et la réponse se trouve encore dans la FAQ dont le lien est accessible dans le menu du forum en haut de page.
    https://cpp.developpez.com/faq/cpp/?...lass-et-struct

    Ou encore parmi les nombreux cours, toujours accessibles via ce même menu.
    https://cpp.developpez.com/cours/polyCpp/#LII

    Mais on ne réalisera pas ton travail de transformer le 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.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,
    Citation Envoyé par didierma34 Voir le message
    Mon cas est basé sur les structures et mes questions sont plus précises car il me faut savoir comment je déclare mes structures dans le langage qui est le WLangage. Même en lisant tous les liens proposés, je ne sais toujours pas comment vais-je déclarer mes structures en WLangage.
    La bonne question à se poser est donc: pourquoi donc voudrais tu faire hériter deux structures (dans le sens: des agrégats de données n'exposant aucun autre service que celui de permettre d'accéder et de modifier les valeurs de ces données)

    Quel avantage (supposé) espères tu en retirer? Si c'est juste pour "réutiliser" les données de Structure_1 dans Structure_2, es tu vraiment fainéant au point de n'avoir pas envie de faire un copier/coller de trois lignes dans ton code

    Et surtout, peut-on vraiment considérer que Structure_2 est une sorte "améliorée" de Structure_1? Il faudrait voir le nom réel des structures, mais, en dehors de toute indications plus spécifiques, j'aurais tendance à croire que non...

    Il faut bien comprendre que l'héritage est la relation la plus forte qui puisse exister entre deux classes, et donc, que c'est la relation qui ne peut s'envisager que lorsque les autres ne s'appliquent vraiment pas et surtout, quand la substituabilité peut s'appliquer: une voiture (une moto ou un camion) peut hériter de véhicule, parce que l'on peut transmettre une voiture (un camion ou une moto) à n'importe quelle fonction s'attendant à manipuler un véhicule, car c'est effectivement ce que la voiture est.

    Dans le cas qui nous occupe, j'aurais tendance à dire que la meilleure relation que tu pourrais avoir (si l'idée d'avoir tes trois DWORD séparés ne te tente vraiment pas) serait une simple composition, sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct Structure_1{
        DWORD   dwSize;    
        DWORD   dwVersion; 
        DWORD   dwID;
    };
    struct Structure_2{
        Structure_1 globalInfos;
        DWORD   dwRequestID;
        DWORD   dwObjectID;
        DWORD   dwDefineID;
        DWORD   dwFlags
    };
    car la durée de vie des informations contenues dans Strucutre_1 dépend exclusivement de la durée de vie de Structure_2: les informations spécifiques à une instance particulière de ta Structure_2 faisant partie de Structure_1 n'ayant plus aucun intérêt lorsque cette instance spécifique cesse d'exister.

    Bien sur, cela veut dire qu'il faut ajouter une indirection à ton code, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void foo(Structure_2 const & data){
        if(data.globalInfos.dwSize >1 && data.globalInfos.dwVersion ==2){
            /*... */
        }
    }
    mais cela aura au moins le mérite de rendre ton code bien plus explicite quant à la donnée qui est manipulée, et pourquoi on la manipule de cette manière
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/11/2008, 15h43
  2. Explications classe persistence et héritage
    Par skyangel dans le forum JPA
    Réponses: 7
    Dernier message: 30/05/2008, 15h32
  3. delete héritage structure
    Par demss dans le forum C++
    Réponses: 12
    Dernier message: 17/03/2008, 23h31
  4. explication sur tableaux structuré
    Par frost80500 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 18/01/2008, 20h02
  5. Héritage de structure en C
    Par Fred.77 dans le forum C
    Réponses: 12
    Dernier message: 03/11/2007, 20h33

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