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 :

struct et class


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut struct et class
    Salut à tous.
    Une doute m'assaille, je recherche une confirmation sur une petite question simple mais pourtant je crois que seuls les quelques gourous qui trainent sur ce forum me donneront une réponse définitive: la seule différence que je connais entre les mots clés struct et class en C++ est que les membres d'une struct sont par défaut en public et ceux d'une classe par défaut en private, mais est-ce qu'il en existe d'autres?
    Merci d'avance.

  2. #2
    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
    - Les accès d'héritage par défaut
    - Les vieux réflexes, de C-iens, qui tiennent à associer struct aux structures à la C seulement, et class à tout le reste

    Je crois que c'est tout.
    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...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    - Les accès d'héritage par défaut
    Tu pourrais approfondir, la je ne vois pas trop de quoi tu parles?

  4. #4
    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
    Une structure qui hérite le fait de façon publique par défaut... Une classe de façon privée.
    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...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Ha, j'ignorais qu'on pouvait ne pas spécifier le type d'héritage
    Bon ben si c'est tout alors mon problème est résolu, merci!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    Je up ce topic car j'ai le même question. En fait, j'avais jeté un oeil dans sur comment était fichue la class complex de la STD c++. Dans l'ancienne version de mingw (3.4 je crois), la class complex est explicitement une class, alors que dans la derniere version que j'ai téléchargé aujourd'hui 4.2.1, elle n'est plus une class mais une struct. Est ce qu'il y a un argument qui justifierait ce changement?

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par reptils Voir le message
    Je up ce topic car j'ai le même question. En fait, j'avais jeté un oeil dans sur comment était fichue la class complex de la STD c++. Dans l'ancienne version de mingw (3.4 je crois), la class complex est explicitement une class, alors que dans la derniere version que j'ai téléchargé aujourd'hui 4.2.1, elle n'est plus une class mais une struct. Est ce qu'il y a un argument qui justifierait ce changement?
    Est-ce qu'il y a des membres privés dans la classe ? Si la réponse est non, il n'y a aucun intérêt à en faire une class, puisque une struct permet d'écrire la même chose en étant plus clair.

    Ceci dit, le standard C++ précise que la classe complex<T> est définie par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <class T> class complex;
    template <> class complex<float>;
    template <> class complex<double>;
    template <> class complex<long double>;
    Puisqu'il est tout à fait possible d'imaginer l'utilisation une forward declaration de la classe complex<T> dans un fichier header d'un programme, j'aurais eu tendance à dire que la librairie de g++ est malformée. Cependant, je viens de regarder la version SVN de g++, et la définition de complex dans la librairie standard C++ est conforme (utilisation de class au lieu de struct). Es-tu sûr que tu ne confonds pas avec complex.h (de la librairie standard C ?)
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par reptils Voir le message
    Est ce qu'il y a un argument qui justifierait ce changement?
    L'argument psychologique cité par Luc ? (et qui tomberait un peu à plat ici...)

    J'ai vu une fois un autre problème, qui était que sur certains compilateurs, que l'on dise class ou struct, ça revenait au même (sauf les accès par défaut, comme spécifié dans le standard), mais si on disait class à un endroit et struct à un autre pour la même structure de donnée, le compilateur (l'éditeur de liens, je crois) se plantait lamentablement, car les noms étaient décorés différemment. C'est clairement un bug du compilateur en question, mais peut-être que des gens on voulu le contourner ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Es-tu sûr que tu ne confonds pas avec complex.h (de la librairie standard C ?)
    non non c'est bien complex que j'ai récupéré de la version 4.2.1 de mingw dans
    include\c++\4.2.1

    voici le lien
    http://reptils.free.fr/Divers/complex

    les forward declaration sont bien faite avec des class mais apres la declaration de la class est faite avec un struct... et dedans il y a un private pour définir les parties réelles et imaginaires
    ou alors j'ai loupé un truc...

    En meme temps j'ai lu là http://gcc.gnu.org/gcc-4.2/changes.html "Added support for TR1 <random>, <complex>, and C compatibility headers."
    peu etre un element de reponse

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par reptils Voir le message
    non non c'est bien complex que j'ai récupéré de la version 4.2.1 de mingw dans
    include\c++\4.2.1

    voici le lien
    http://reptils.free.fr/Divers/complex

    les forward declaration sont bien faite avec des class mais apres la declaration de la class est faite avec un struct... et dedans il y a un private pour définir les parties réelles et imaginaires
    ou alors j'ai loupé un truc...

    En meme temps j'ai lu là http://gcc.gnu.org/gcc-4.2/changes.html "Added support for TR1 <random>, <complex>, and C compatibility headers."
    peu etre un element de reponse
    Dans les commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //
    // ISO C++ 14882: 26.2  Complex Numbers
    // Note: this is not a conforming implementation.
    // Initially implemented by Ulrich Drepper <drepper@cygnus.com>
    // Improved by Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
    //
    Ils le disent eux-même : la librairie est malformée.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Ils le disent eux-même : la librairie est malformée.
    Bien vu!
    c'est quant meme assez bizarre ce genre de décision sachant que la premiere version était correctement écrite

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par reptils Voir le message
    Bien vu!
    c'est quant meme assez bizarre ce genre de décision sachant que la premiere version était correctement écrite
    La décision dépends de Gabriel Dos Rei (cf ce mail de la mailing list libstdc++). Je n'arrive pas vraiment à comprendre la raison de ce changement (si ce n'est peut être une vague notion de compatibilité avec le C99 au moment du link). Je n'ai pas trouvé de rationale publié sur le sujet, donc ça reste du domaine de l'hypothétique.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Je ne vois aucun lien entre ces messages et l'histoire de class/struct qui pour moi est tout à fait correcte dans la version présentée.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Je ne vois aucun lien entre ces messages et l'histoire de class/struct qui pour moi est tout à fait correcte dans la version présentée.
    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
     
    *** 113,121 ****
         *  @param  Tp  Type of real and imaginary values.
        */
        template<typename _Tp>
    !     class complex
          {
    -     public:
            /// Value typedef.
            typedef _Tp value_type;
     
    --- 113,120 ----
         *  @param  Tp  Type of real and imaginary values.
        */
        template<typename _Tp>
    !     struct complex
          {
            /// Value typedef.
            typedef _Tp value_type;
    Il y a bien un changement de class complex en struct complex.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  15. #15
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Il y a effectivement eu ce "changement", mais comme il ne change rien, je suppose que les commentaires qui indiquent une non conformité à la norme sont liés à un autre point, en particulier cette histoire de clog mentionnée dans le log.

    Le plus simple est d'envoyer un mail à Gaby pour confirmer, qui s'en charge ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    j'aimerai bien, mais j'ai pas le background c++ suffisant pour le faire

  17. #17
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Il y a effectivement eu ce "changement", mais comme il ne change rien, je suppose que les commentaires qui indiquent une non conformité à la norme sont liés à un autre point, en particulier cette histoire de clog mentionnée dans le log.

    Le plus simple est d'envoyer un mail à Gaby pour confirmer, qui s'en charge ?
    A mon avis, le changement n'impacte en rien la conformité. Il était peut-être nécessaire pour profiter des built-in de gcc -- ce qui serait alors plutôt une limitation de ce système qu'autre chose.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  18. #18
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Il y a effectivement eu ce "changement", mais comme il ne change rien, je suppose que les commentaires qui indiquent une non conformité à la norme sont liés à un autre point, en particulier cette histoire de clog mentionnée dans le log.

    Le plus simple est d'envoyer un mail à Gaby pour confirmer, qui s'en charge ?
    Je l'ai fait hier, mais laissons lui le temps de répondre
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

Discussions similaires

  1. Passer de struct (C) à class (JAVA)
    Par rtg57 dans le forum Langage
    Réponses: 8
    Dernier message: 01/05/2010, 22h50
  2. [Débutant] Struct v Class !
    Par F.Saad dans le forum C#
    Réponses: 3
    Dernier message: 27/07/2009, 12h21
  3. diff entre struct et class
    Par camboui dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2009, 18h53
  4. Struct et classes
    Par oodini dans le forum C++
    Réponses: 3
    Dernier message: 14/08/2008, 18h03
  5. Struct ou classe ?
    Par Fl0r3nt dans le forum C++
    Réponses: 8
    Dernier message: 27/06/2007, 11h27

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