// declare a class with private variable “int * _a”
// declare a function of this class, foo()
Void foo() {
int * _a; // 1. Does this re-declaration then make _a equal to an unknown value?
// 2. Does a go out of scope after foo() returns?
}
Répondre
- Est-ce que cette re-déclaration puis faire
_a
égale à une valeur inconnue?
Non, ce n'est pas une "nouvelle déclaration." C'est une déclaration d'une variable locale nommée _a
. Il n'est pas initialisé.
Il n'a aucune relation avec la variable membre de la classe _a
. Après la déclaration du _a
local, vous ne pouvez plus accéder à la variable membre _a
en utilisant _a
(car _a
fait référence à la variable locale!), Mais vous pouvez vous y référer en utilisant this->_a
.
- Est-ce un hors de portée après
foo()
retours?
Oui. Les variables locales sortent de la portée lorsque l'étendue dans laquelle elles sont déclarées se termine (c'est de là que vient «sortir de la portée»).
Ceci est ce que l'on appelle l'observation. foo()
le pointeur local _a
ombrage le pointeur de membre de classe du même nom. Étant donné que foo()
est un membre de la classe, toute référence à _a
résoudrait au pointeur local. De plus, comme toute variable étendue, ce pointeur se détruit automatiquement lorsqu'il est hors de portée. Le pointeur de membre, inutile de le dire, restera vivant tant que sa propre instance sera vivante.
Pour accéder aux données de membre, vous devez dire this->_a
.
- 1. Portée des variables ASP.Net
- 2. Portée des variables JavaScript?
- 3. Lambda portée des variables
- 4. PHP: la portée des variables Question/Variables
- 5. question PHP portée des variables
- 6. JS portée des variables missunderstanding
- 7. Portée des variables en Javascript
- 8. Portée des variables à l'intérieur des fonctions anonymes en C#
- 9. Requête sur la portée des variables locales dans C
- 10. Problèmes avec la portée des variables (JavaScript)
- 11. Portée des variables de formulaire dans Grails
- 12. Comment limiter la portée des variables
- 13. instruction switch PHP portée des variables
- 14. Android ExpandableListView la portée des variables
- 15. Objective-C: variables d'instance hors de portée dans le débogueur
- 16. Portée de visibilité - variables globales
- 17. Impossible de limiter la portée des variables dans Matlab
- 18. Comment utiliser plusieurs variables pour un verrou Portée dans C#
- 19. fermetures de JavaScript et la portée des variables
- 20. eval() avec des variables d'un objet dans la portée
- 21. CakePHP voir question de la portée des variables
- 22. Portée des variables au niveau du package Oracle
- 23. Comment modifier les variables d'une autre portée?
- 24. C# Portée des variables vs objets lors du paramétrage dans les méthodes
- 25. Confusion des problèmes de portée globale C++
- 26. Fichiers d'en-tête C++ et portée variable
- 27. Variables globales dans C
- 28. portée de #undef C++
- 29. Décalage C++ des variables membres?
- 30. problème de portée C
Voulez-vous dire «void»? –
Voulez-vous dire 'Klass :: foo()'? – wilhelmtell
Veuillez écrire un code qui compile au moins. Comme écrit, non seulement le code est brisé, mais foo n'est pas une fonction membre d'une classe. – catphive