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 :

Structure ou classe ?


Sujet :

C++

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut Structure ou classe ?
    Bonjour tout le monde !
    Je me pose la question de savoir s'il vaut mieux utiliser une structure ou une classe ?
    Quand on a 5 ou 6 variables à stocker, en C, on utilise une structure.
    En C++, une structure n'est rien d'autre, si j'ai bien compris, qu'une classe dont le spécificateur d'accès par défaut est public ?
    Dans ce cas, quand utiliser le mot-clé struct ?
    Est-ce que ça change quelque chose ?

    Merci d'avance !

  2. #2
    Membre averti Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Points : 358
    Points
    358
    Par défaut
    Comme il n'y a presque aucune difference, c'est plus une question de gout qu'autre chose.

    Personellement j'utilise struct quand je n'ai pas de constructeurs, sinon c'est class.

  3. #3
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Personnellement j'utilise une struct lorsqu'il s'agit de stocker des attributs ensemble mais dont on veut seulement initialiser et connaitre leur valeur. Dès que l'objet réalise ses propres opérations à ce moment je me pose la question de le passer en class.

    Typiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct Point3d
    {
      int x_;
      int y_;
      int z_;
      Point3d(int x,int y,int z);
    };
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    class Point3d
    {
    private :
      int x_;
      int y_;
      int z_;
    public :
      Point3d(int x,int y,int z);
      Point3d calcul_barycentre();
      Point3d calcul_projete(Plan z);
    /*...*/
    };

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Comme tu l'as dit, la principale différence est que le spécificateur d'accès par défaut est public pour la structure. L'héritage est également publique par défaut pour els structures (contrairement aux classes).

    En ce qui me concerne j'utilise les structures surtout pour les classes contenant de nombreuses propriétés de type (les classes de traits) sous forme de typedef, ou pour les petites classes de métaprog.

  5. #5
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    OK. En gros, c'est essentiellement une question de préférence .

    Merci !

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 632
    Points : 30 711
    Points
    30 711
    Par défaut
    Salut,

    Comme indiqué, la seule différence se trouve du coté de la visibilité par défaut (des éléments constitutifs comme de l'héritage).

    Il faut savoir qu'il est tentant, quand on a un accès direct à une valeur, de "disséminer" les accès à cette valeur un peu partout dans le code, ce qui *peut* occasionner des problèmes de compatibilité si on décide de changer la manière dont les variables sont maintenues en mémoire:

    Un point 3D - par exemple - peut représenter ses valeurs sous la forme de x, y et z ou de float [3] ou encore de std::vector<float>.

    Si tu décide de passer de l'un à l'autre, tu devra commencer à vérifier chaque endroit où tu effectue un accès direct à la donnée (AKA sans appeler un mutateur ou un accesseur), non seulement dans ton code, mais aussi, s'il s'agit d'une bibliothèque, dans tout le code créé par l'utilisateur de celle-ci.

    Il n'y a, bien sûr rien qui puisse t'empêcher de déclarer les membres privés et les accesseurs/mutateurs publiques dans une structure, tout comme il n'y a rien qui t'empêche de déclarer les membres publiques dans une classe, mais, l'un dans l'autre, quitte à déclarer quelque chose avec une visibilité privée, autant que ce soit la visibilité par défaut

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

Discussions similaires

  1. Structure et classe : problème
    Par dword2add dans le forum C++
    Réponses: 4
    Dernier message: 08/12/2007, 19h51
  2. Schéma structure des classes
    Par delma dans le forum EDI et Outils pour Java
    Réponses: 8
    Dernier message: 29/11/2006, 17h52
  3. [log4j] structurer par classes
    Par frouge dans le forum Logging
    Réponses: 4
    Dernier message: 25/09/2006, 12h24
  4. Structure de classe dynamique
    Par amel666 dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2006, 10h13
  5. structure de class?
    Par kiko69 dans le forum C++
    Réponses: 4
    Dernier message: 13/03/2005, 15h30

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