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:
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 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”.