J'ai lu sur d'autres questions ici et il y a quelque chose qui m'a confondu et j'espère que cela peut être expliqué. Je suis sûr que là-bas est une chose simple, mais cela me fait allusion.
Donc, dans C ++, nous avons des variables privées qui ne sont visibles que dans la classe: p> mais nous Peut aussi avoir des espaces de noms Sans nom: P> namespace
{
int i;
}
4 Réponses :
Les espaces de noms ne sont pas liés aux objets / classes. En particulier, si vous avez deux objets, chacun a sa propre copie d'une variable privée. P>
Ils ne sont pas les mêmes.
Integer Le Integer privé L'équivalent en utilisant et instancier le seul i code> dans l'espace de noms anonyme sera partagé par toutes les instances de
myClass code>. P>
i code> dans
myClass code> sera unique pour chaque instanciation de la classe. p>
privé code> serait de faire
i code> statique: p>
i code> comme ceci: p>
//.cpp
int MyClass::i = 0;
C'est assez évident maintenant que vous l'expliquez. Je savais qu'ils ont été préférés sur des statistiques dans certains cas, mais ces 2 déclarations ne se sont pas nées dans ma tête pour une raison quelconque :-) Merci
Ce sont des concepts assez différents. Le membre de données privé n'est visible qu'à une classe et dans le cas non statique, chaque instance de classe détient l'une d'entre elles. L'espace de noms anonyme vous permet de créer un code disponible uniquement sur un autre code dans le même fichier. Donc, dans le cas de la variable int code>, tout le code défini au même endroit que l'espace de noms anonyme verrait la même variable. P>
Les deux semblent être privés à la classe ... p> blockQuote>
Non, seul le premier est privé à la classe. C'est une variable de membre non statique; On est instancié à chaque objet du type de classe. P>
La seconde n'est pas dans une classe du tout; Il a une durée de stockage statique, donc l'une est instanciée pour l'ensemble du programme. Tout ce qui l'accède est d'accéder à la même variable que tout ce qui l'accède. Être dans un espace de noms non nommé, il n'est accessible que dans l'unité de traduction (c'est-à-dire le fichier source) qui le définit; Mais c'est accessible à n'importe quel code là-bas, pas seulement une classe particulière. P>
Y a-t-il un inconvénient à la 2e façon qui signifie que vous devez toujours utiliser des variables privées? p> blockQuote>
Si vous souhaitez une copie de la variable dans chaque objet de classe, vous en avez besoin pour être un élément non statique. P>
Si vous souhaitez le partager entre tous les objets, c'est à vous de faire un membre statique ou de la mettre dans un espace de noms dans le fichier de mise en œuvre de la classe. Je fais souvent ce dernier pour simplifier la définition de la classe. Les inconvénients sont que l'accès n'est pas restreint à la classe, mais également à autre chose dans ce fichier, et vous ne pouvez pas y accéder à partir de n'importe quel code que vous pourriez souhaiter mettre dans l'en-tête. P>