Classe vs Struct pour les données seulement?

Y a-t-il un avantage à utiliser une classe par rapport à une structure dans de tels cas? (note: il ne contiendra que des variables, il n’y aura jamais de fonctions)

class Foo { private: struct Pos { int x, y, z }; public: Pos Position; }; 

Contre:

 struct Foo { struct Pos { int x, y, z } Pos; }; 

Questions similaires:

  • Quand faut-il utiliser une classe vs une structure en C ++?
  • Quelles sont les différences entre struct et class en C ++?
  • Quand devrais-je utiliser un struct au lieu d’une classe?

Il n’y a pas d’avantage réel à utiliser l’un sur l’autre, en c ++, la seule différence entre une structure et une classe est la visibilité par défaut de ses membres (les structures sont classées par défaut en public, les classes par défaut en privées).

Personnellement, j’ai tendance à préférer les structures pour les types POD et les classes d’utilisation pour tout le rest.

EDIT: litb a fait un bon point dans le commentaire alors je vais le citer ici:

Une autre différence importante est que les structures dérivent d’autres classes / struct public par défaut, tandis que les classes dérivent en privé par défaut.

L’un des inconvénients est que les structures sont souvent utilisées pour les structures de données agrégées initialisées, car tous les membres de données non statiques doivent de toute façon être publics (C ++ 03, 8.5.1 / 1).

 struct A { // (valid) { int a; int b; } x = { 1, 2 }; struct A { // (invalid) private: int a; int b; } x = { 1, 2 }; class A { // (invalid) int a; int b; } x = { 1, 2 }; class A { // (valid) public: int a; int b; } x = { 1, 2 }; class A { // (invalid) public: int a; private: int b; } x = { 1, 2 }; 

struct et class signifient exactement la même chose en C ++ à l’exception que l’access par défaut pour les membres et les bases de struct est public alors qu’il est privé pour les classes. J’ai tendance à choisir struct pour les classes qui ont seulement des membres publics et des classes pour tout le rest, mais ce n’est qu’un problème de style.

La seule différence entre une classe et une structure est que les membres de la structure sont publics par défaut et les membres de la classe sont privés par défaut. Donc, je dis aller avec celui que vous préférez. Je suis sûr qu’il y a des arguments à faire pour déterminer lequel est le plus lisible, mais je ne pense vraiment pas que ce soit un gros problème.

Le choix entre une structure et une classe dépend essentiellement de votre style et de la quantité de texte que vous souhaitez taper.

  • Si vous avez uniquement des membres publics dans une classe / structure, vous pouvez également utiliser le mot-clé struct. Cela vous évitera de devoir taper “public:” plus tard.
  • L’autre raison de choisir une structure sur une classe serait de documenter implicitement l’intention de l’object. Donc, vous feriez des structures de types POD (même s’ils contiennent un constructeur et des méthodes d’assistance statique, etc.), et vous utiliseriez classe pour toutes les autres classes “normales”.

Si le contenu du type ne pose pas de problème d’allocation de mémoire (tel que plain int), utiliser struct convient si vous le souhaitez et que vous avez délibérément choisi de le justifier, ce que vous pouvez justifier à ceux qui utilisent votre code. Toutefois, si l’un des membres est un type de pointeur, vous devez réfléchir sérieusement aux problèmes de gestion de la mémoire. Vous pouvez toujours utiliser une struct , mais vous aurez beaucoup plus de chances d’avoir besoin d’un destructeur, de constructeurs, etc. À ce stade, vous voulez une class .

“(note: il ne contiendra que des variables, il n’y aura jamais de fonctions)”

Ce n’est jamais un grand mot. Habituellement, “jamais” signifie “finalement”. Puisque c’est le cas, je suggérerais que vous utilisiez un cours. De cette façon, quand les choses changent, vous n’avez pas beaucoup à changer.

Les gens de Java (et de Python) se sont bien entendus, tout étant une classe. Cela ne leur a fait aucun mal de ne pas avoir ces classes spécialisées sans méthode que C ++ appelle une “struct”.