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 :

les structures en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Par défaut les structures en c++
    Bonjour;
    je veux savoir est ce juste cette déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    struct componant
    {
        struct rectangle rec;
        int flag;   /* bool‚en indiquant si la composante est toujours active
    		   (on a trouv‚ dans la ligne de balayage courrante des
    		   segments connexes)
    		*/
        int npn;    /* nombre de pixels noirs */
        struct componant *follow;   /* pointeur vers la composante suivante */
    } *lca, *ptrlca;
    j'ai des doutes pour la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct componant *follow;
    est ce qu'elle est acceptée par le compilateur?

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Déjà, le mot clé struct ne doit être utilisé que lorsque tu déclare anticipativement une structure ou lorsque tu la défini.

    De la même manière, il n'est pas nécessaire, contrairement au C, de définir un alias de type (typedef) au départ d'un type défini par l'utilisateur.

    En effet, tout type défini par l'utilisateur (struct, union, enum, class) est automatiquement reconnu comme... étant un type valide utilisable dans la déclaration d'une variable.

    Ainsi donc, la définition de ta structure devrait, idéalement (en considérant que la structure rectangle ait été définie plus haut, éventuellement par le jeu d'inclusion en cascade) ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct componant
    {
        rectangle  rec;
        int flag;
        int npn;
        componant * follow;
    };
    éventuellement suivie, si tu le souhaite, des deux alias de types que tu souhaites créer sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef compnant* lca;
    typedef componant* ptrlca;
    De plus, si la valeur de flag ne peut être que vrai (true) ou faux (false), il est peut etre préférable de choisir le type booléen (bool), plutot que le type entier.

    Mais il n'y a effectivement aucun problème à déclarer, comme champs d'une structure, un pointeur sur... la structure en question

    Ceci dit, pense quand même que le C++ est un langage orienté objet, et que, de ce fait, l'idée générale reste toujours de penser plus sous la forme de "message émis / reçus" ou de "services rendus" que sous la forme de données contenue.

    L'idéal reste donc toujours - dans l'immense majorité des cas - de penser à cacher les détails d'implémentation et de fournir plutot des méthodes permettant de manipuler "sereinement" les données contenues dans une structure (cela s'appelle "l'encapsulation des données")

    En outre, la structure que tu nous présente ressemble très fortement à une liste ou à une file, et, il se fait que le standard fournit justement des classes génériques qui permettent de gérer facilement ces concepts:

    La classe list, disponible dans l'espace de noms std par inclusion du fichier d'en-tête <list> fournit toutes les méthodes qui peuvent s'avérer utiles pour gérer les liste chainées, et la classe queue, également disponible dans l'espace de noms std, mais par inclusion du fichier d'en-tête <queue> cette fois, fournit toutes les méthodes utiles à la gestion de files.

    Il existe même la priority_queue qui apporte en plus la possibilité de trier les éléments selon une priorité particuliè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

  3. #3
    Membre éclairé Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Par défaut
    merci bien pour les explications et les idées pertinentes que vous avez donné. ça m'a beaucoup aidé.

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

Discussions similaires

  1. Les structures et vous
    Par lanonyme dans le forum C++
    Réponses: 14
    Dernier message: 18/05/2006, 11h17
  2. [POO] Les structures de données comme en C++...
    Par FrankOVD dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2006, 19h44
  3. Aide sur les structure
    Par Yoshio dans le forum C
    Réponses: 7
    Dernier message: 18/02/2006, 12h56
  4. Question sur les statics et les structures
    Par Steph12 dans le forum C
    Réponses: 3
    Dernier message: 24/03/2005, 13h20
  5. Coherence dans les structures arborescentes...
    Par Alec6 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/09/2004, 12h04

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