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

Affichage des résultats du sondage: Le mieux pour la déclaration des structures ?

Votants
18. Vous ne pouvez pas participer à ce sondage.
  • Tout déclaré avec des pointeurs

    0 0%
  • Tout déclaté par valeurs

    2 11,11%
  • Faire un mix

    7 38,89%
  • Ne pas utilisé de structure

    6 33,33%
  • Je sais pas ce que c'est.

    3 16,67%
C++ Discussion :

Les structures et vous


Sujet :

C++

  1. #1
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut Les structures et vous
    Bonjour,

    Dans le but de me perfectionné , je souhaiterai savoir ce qui est le mieux pour les structures.
    Pour être plus précis, je me demande si le mieux est d'utiliser des passages par adresse (pointeur) ou par valeur pour sa declaration ?

    Un bout de code concret pour illustrer ma demande :
    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
     
    private:
            struct stActivity
            {
              TList *Events ;
              TList *Task;
              String Tps;
            };
     
            struct StockageDesOptions
            {
               stActivity Activity;
            };
     
            StockageDesOptions *StockOptions ;
    Voici la facon dont j'ai procédé.

    Pour resumé, le mieux c'est :
    - Tout déclaré avec des pointeurs
    - tout déclaté par valeurs
    - Faire un mix

    Un petit retour d'experience serai gentil

    Merci pour vos réponses

    lanonyme

  2. #2
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    La base du C++ est le langage C comme tout le monde le sait, le C++ est un langage orienté objet, ce type de langage est utilisé pour la sécurité des données, le C++ est le seul langage OO (Orienté Objet) à utiliser les structure, qui est un vestige du C, les structure sont à utiliser le moins possible au point de vue sécurité, en effet tout ce qui est déclaré dans une structure est accécible à tous, la POO à mis au point un autre type, qui, normalement remplace les structures; la class, en effet les classe sont ni plus ni moins des structures avancés, ca se voit dans les déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct MaStructure{
    ...
    } ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class MaClasse{
    ...
    } ;
    Les differences sont donc du point de vus sécurité, la classe met par default toute les declaration à private, et donc ne sont pas accessible, pour le rendre accessible, il faut obligatoirement préciser le type public devant la déclaration.
    Conclusuion, il ne vaut mieux pas utilisé les structures si tu veut que ton application soit sécurisé au maximum, cela dis tout le monde, moi y compris utilise les structures.

    Sur un autres point, celui de l'allocation mémoire dynamic ou static, il vaut mieux utiliser les pointeurs, car cela monopolise moins de mémoire lors de l'execution du programme, en effet les objet sont alloué en mémoir dès le lancement de l'application, alors que les pointeur sont alloué lors du new dans le programme et sont libéré lors du delete, qui ne se font pas forcement au début et à la fin du programme.

    Voila, j'espère que cela t'éclaircira certains points.
    A plus
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  3. #3
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Merci pottiez pour cette explication forte interressente.

    Je viens de me rentre compte que apparement, il est necessaire (dans mon exemple) d'instancié aussi par new les pointeurs à l'interieur des structures (lourd ) pour evité les erreurs d'acces mémoires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      StockOptions->Activity->Events = new TStringList ;
      StockOptions->Activity->Task  = new TStringList ;

    Au départ, je parlais de l'utilisation des pointeurs au sein même des structures :
    Sans pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            struct stActivity
            {
              TList Events ;
              TList Task;
              String Tps;
            };
     
            struct StockageDesOptions
            {
               stActivity Activity;
            };
    NB: Ne marche pas car :
    Citation Envoyé par C++ Builder 6
    Les classes de style VCL doivent être construites en utilisant l'opérateur new
    Avec pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            struct stActivity
            {
              TList *Events ;
              TList *Task;
              String *Tps;
            };
     
            struct StockageDesOptions
            {
               stActivity *Activity;
            };
    Mix :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            struct stActivity
            {
              TList *Events ;
              TList *Task;
              String Tps;
            };
     
            struct StockageDesOptions
            {
               stActivity Activity;
            };
    En regard du post de pottiez, je me dis que la class parait le mieux adapter surtout avec l'utilisation de pointeur ( et ainsi pouvoir les initialiser dans le constructeur).

    Toutefois, j'ai quelque difficulté à me representé une classe avec les structures multiples que j'utilise.
    Faudrai t'il que je fasse plusieurs classes, qui ne contiendrai aux maximum chacun que 5 objets (liste, strings) ?
    je pense que cela risquerai d'alourdir le projet....

    EDIT : Tout ceux qui avait repondu, Tout déclaté par valeurs ont perdu (cf plus haut )

    lanonyme

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Ajouter des classes ou des structures cela alourdis forcement ton projet, par contre la classe n'alourdit pas énormément plus que la structure, tout du moins je le pense.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  5. #5
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    je pensai alourdir dans le sens où, pour moi, une classe necessite un .h et .cpp alors que les structures sont directement inclus dans le .h ou tu les utilises.

    lanonyme

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par lanonyme
    je pensai alourdir dans le sens où, pour moi, une classe necessite un .h et .cpp alors que les structures sont directement inclus dans le .h ou tu les utilises.

    lanonyme
    Les classes et les structures, c'est la même chose, on peut avoir des structures qui ont des fonctions membres ou des classes qui n'en aient pas.

    Perso, je suis pour le tout valeur, mais avec des nuances dans le sens où ce qui est polymorphique peut être encapsulé dans un pointeur intelligent - ce qui devrait être la norme, pas de pointeur en variable membre ou en variable dans une fonction, que des pointeurs intelligents. -, ce qui permet de faire des copies à faible coût, le grand inconvénient des valeurs.

  7. #7
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Bonjour,
    Merci pour ton retour Miles

    Je n'avai pas vu ça comme ça

    J'ai converti donc mes structures en classe

    Par contre, je vois pas comment, on réalise des fonctions membres appartenant à une structure ?
    Est ce la même declaration que pour les classes ?

    lanonyme

    D'autres Opinions

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Oui, c'est exactement la même chose. Comme dit précédemment, le mot clé class définit les membres comme privés par défaut tandis que pour struct, ils sont publiques par défaut.

  9. #9
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    De plus l'héritage est par défaut public avec la structures alors qu'il est privé avec les classes.

  10. #10
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tout ce qu'il faut savoir est déjà dans la

    http://c.developpez.com/faq/cpp/?pag...e_class_struct

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Classe ou structure -> question de goût. Aucun aspect sécuritaire n'intervient là dedans. Entre avoir une classe dans laquelle le premier truc écrit est "public:" et avoir une structure où les détails d'implémentation sont privés à la fin ... Je ne vois pas en quoi la classe est plus sécurisée -- surtout quand les spécs qualités disent : "l'interface publique en premier"...

    De plus, pour les classes de données, utiliser une structure est une approche classique héritée du C. On les utilise également souvent pour définir types de traits et autres foncteurs.

    Ensuite. Pointeur ou pas poiteur, là n'est pas la question.
    La question est d'abord, pour moi, quelle est la sémantique ? Valeur ou entité ? Rien que cette première question me fait décider de pointeur (intelligent ou brut) ou valeur. Dans le second cas des sémantiques de valeurs, je peux partir sur du pointeur si les données à échanger sont grosses et que les cycles de vie trascendent les portées des constructions. Ce n'est pas systématique.
    Et l'empreinte en mémoire n'est pas plus grande que dans le cas d'un pointeur. Une donnée construite pointée va toujours couter sizeof(void*) octets de plus. Faut juste comparer ce qui est comparable : une valeur globale avec un pointeur global, et une valeur inscrite dans une portée avec un pointeur inscrit dans la même portée. Quand ce n'est pas comparable (cycles de vie différents, ...) pourquoi comparer ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Merci pour vos réponses

    @Laurent Gomila: j'avai pas vu, j'avoue que je suis plus sur la FAQ du Builder

    @Luc Hermitte: Me voila avec une nouvelle vision des declarations quelque peu intriguante.

    Citation Envoyé par Miles
    ce qui devrait être la norme, pas de pointeur en variable membre ou en variable dans une fonction, que des pointeurs intelligents.
    Faut t'il comprendre qu'il ne faut pas passer de pointeurs aux fonction ?

    Est-ce que je pourrai avoir plus precisions sur ce qu'est un pointeur
    intelligent ou brut ?


    lanonyme

  13. #13
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Est-ce que je pourrai avoir plus precisions sur ce qu'est un pointeur
    intelligent ou brut ?
    C'est dans la FAQ C++

  14. #14
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut


    Désolé




    lanonyme

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par lanonyme
    Faut t'il comprendre qu'il ne faut pas passer de pointeurs aux fonction ?
    Pour être sûr de ne pas avoir de fuites mémoire, oui, mais si le pointeur est géré autre part, on peut le passer en argument à une fonction, il faut simplement s'assurer que la fonction ne le donne pas à un autre pointeur intelligent

Discussions similaires

  1. Les outils que vous utilisez pour programmer en assembleur
    Par Smortex dans le forum x86 32-bits / 64-bits
    Réponses: 36
    Dernier message: 15/08/2022, 11h28
  2. Réponses: 5
    Dernier message: 08/10/2013, 23h20
  3. Vos avis sur les éditeurs que vous utilisez ?
    Par simone.51 dans le forum Editeurs / Outils
    Réponses: 18
    Dernier message: 08/02/2006, 20h41
  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