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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    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
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    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
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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.

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    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.

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