web-dev-qa-db-fra.com

Structures privées C++

J'ai lu que les principales différences entre les classes et les structures (autres que les fonctions) sont que les membres de la classe passent par défaut à privé, alors que les membres de structure passent par défaut à public.

Cela implique que les membres de la structure peuvent être privés. Ma question est la suivante: pouvez-vous avoir des membres de structures privées? Et si vous le pouvez, quel est le but d'utiliser des membres privés? Comment voudriez-vous même y accéder?

15
Dasaru

Oui, les structures peuvent avoir des membres privés, il vous suffit d'utiliser le spécificateur d'accès pour les mêmes.

struct Mystruct
{
    private:
       m_data;

};

Seules les différences entre structure et classe sont:

  • le spécificateur d'accès est par défaut privé pour la classe et public pour la structure
  • héritage par défaut privé pour la classe et public pour struct 

Comment pouvez-vous y accéder?
Tout comme vous accédez aux membres privés d’une classe. c'est-à-dire qu'ils ne sont accessibles que dans les fonctions membres des structures et non dans les structures dérivées, etc.

23
Alok Save

Le seulement différence entre struct et class correspond à l'accès par défaut (à l'exception de certaines situations de modèle étranges, voir les commentaires d'Alf ci-dessous). Cela signifie que vous pouvez accéder aux membres privés de la même manière que dans une classe:

struct foo {
  int get_X() { return x; }
  void set_X(int x_) { x = x_; }
private:
  int x;
};

Que vous utilisiez struct ou class, alors, est purement une question de style. J'ai tendance à utiliser struct lorsque tous les membres sont publics (par exemple, s'il s'agit d'une classe de foncteurs sans variables membres et uniquement des fonctions publiques).

3
bdonlan

Ce qui est utile, c’est que vous pouvez également utiliser la clé ami Word dans les structures, de sorte que les membres privés ne peuvent être utilisés et modifiés que par les fonctions ou classes spécifiques ou ce que vous ne voulez pas pouvoir modifier. De cette façon, l'utilisateur ne peut pas modifier ces sections elles-mêmes. Ils n'apparaîtront même pas dans les fonctions de remplissage automatique, du moins dans Visual Studio. 

0
Peter Addy