Qu'est-ce que cela signifie réellement lorsque vous déclarez une variable ou une fonction membre comme privée dans une classe C++? Outre le fait évident que, ceux-ci ne sont accessibles que par les fonctions membres, Comment sont-ils mappés différemment sur la mémoire, que leurs homologues publics?Types de données privés et fonctions membres
Répondre
Imaginez qu'ils ont été seulement acessible des fonctions membres, puis le code comme ceci romprait:
class Foo {
int x; // this is private
public:
int& X() { return x; } // this is public, but returns a reference to a private variable
};
Foo foo;
foo.X() = 42; // look, I can set the value of a private member without being inside a member function
en bref, l'une des façons les plus communes pour définir obtenir/setters en C++ se briser s'il y avait un certain sor t de magie imposant qu'une variable privée ne doit être accessible que par les fonctions membres. Ce n'est évidemment pas bon.
public
et private
sont là pour aider le programmeur à structurer son code, et rien de plus. Ils n'offrent absolument aucune sécurité, et aucune protection d'exécution contre le code accédant à un membre "privé". Les variables sont uniquement privées dans le code source. Dans le code compilé, il n'y a pas de différence.
Merci pour la clarification. J'ai juste supposé que déclarer une variable privée le rendrait sûr. – tsudot
En dehors de l'accessibilité, il n'y a aucune différence!
public
et private
sont là seulement jusqu'à la compilation du code. Ils n'ont rien à voir avec la gestion de l'exécution ou de la mémoire.
De documents standards, 02/09/12,
membres de données non statiques d'une de classe (non-union) avec le (clause 11) contrôle même d'accès sont attribuées de telle sorte que ultérieures membres avoir des adresses plus élevées dans un objet de classe. L'ordre d'allocation des membres de données non statiques avec un contrôle d'accès différent n'est pas spécifié (11). Les exigences d'alignement de mise en œuvre peuvent entraîner l'allocation immédiate de deux membres adjacents non l'un après l'autre; les besoins en espace pour la gestion des fonctions virtuelles (10.3) et classes de base virtuelles (10.1) peuvent également être requis.
Les normes a spécifications de l'ordre d'attribution de la mémoire, mais il n'y a pas beaucoup de différence dans la mémoire qui est allouée à un membre de données public
et son homologue private
..
class priva
{
int x=10;
public:
int pub;
};
main()
{
priva a;
int *ptr;
ptr=&a.pub;
--ptr;//4 bite be4 there will be private data
cout<<"Private data having value of 10 is "<<endl;
cout<<*ptr;
}
- 1. Membres privés et protégés: C++
- 2. Commentaires Doxygen pour les membres privés et les fonctions gratuites?
- 3. Masquage de membres de données privés? (C++)
- 4. Membres privés en Python
- 5. MSTest, accesseurs, héritage et membres privés
- 6. Comment créer des membres publics et privés?
- 7. Membres de données protégés et fonctions de données
- 8. Comment gérer l'accès et les collections de membres privés?
- 9. Dériver une classe avec des membres privés
- 10. Documenter des membres privés avec ASDoc
- 11. types pour plusieurs membres
- 12. Utilisation des fonctions membres des membres dans l'initialiseur de constructeur
- 13. Devrais-je m'intéresser aux membres privés en JavaScript
- 14. Comment exclure des membres privés de la règle StyleCop SA1600
- 15. membres privés lors de l'extension d'une classe à l'aide ExtJS
- 16. Fonctions membres C++ vs fonctions libres
- 17. C++: Tableau de pointeurs de fonctions membres vers différentes fonctions
- 18. Comment Spring/Hibernate peut-il accéder aux membres privés?
- 19. Est-il possible d'accéder aux membres privés d'un cours?
- 20. Types de données C# et types de données MySql
- 21. Casser les fonctions membres du public dans de nombreuses fonctions membres privées
- 22. Obtenir des champs et des types de données de tous les membres d'un objet
- 23. Pourquoi avons-nous besoin de constructeurs et de membres privés dans la classe abstraite?
- 24. Test d'unité de grandes fonctions non-membres
- 25. Fonctions de conversion non-membres; Diffuser différents types, par ex. Vecteur DirectX au vecteur OpenGL
- 26. Types de données et XMLParser
- 27. Les membres d'entité doivent-ils être des types de données primitifs ou des types de données Java?
- 28. Nom mangling des classes C++ et ses fonctions membres?
- 29. membres de données protégées
- 30. Différence entre C# et VB.NET pour les valeurs par défaut des membres privés
Je serais très intéressé de savoir pourquoi vous avez besoin de cette information et comment cela affecte-t-il le code (compilation/liaison/exécution) que vous écrivez? – DumbCoder
Je pensais aux moyens d'accéder aux membres privés de données en utilisant leurs adresses de mémoire. – tsudot
J'avais aussi peur de cette réponse! Si vous avez besoin d'y accéder, fournissez des getters/setters ou pourquoi les rendre privés? Perhapse protégé est meilleur! –