(qui peut changer sa valeur au cours du programme)
Ou bien «l'instance de quelque chose» est-elle strictement liée aux classes et aux objets? Si oui, comment définiriez-vous le concept de «variable» en ce qui concerne le C ++?
(qui peut changer sa valeur au cours du programme)
Ou bien «l'instance de quelque chose» est-elle strictement liée aux classes et aux objets? Si oui, comment définiriez-vous le concept de «variable» en ce qui concerne le C ++?
Réponses:
Pour autant que je sache, il est correct d'appeler des valeurs d' instances de types primitifs de ce type (voir par exemple "C ++ Type System" , du manuel de Visual Studio, mais je cherche toujours une autre source), bien que je pense que ce terme est surtout utilisé pour discuter des objets. Un objet est une instance d'une classe C s'il a été construit à partir d'un constructeur défini soit dans la classe C, soit dans l'une de ses sous-classes.
Une variable en C ++ n'est pas un concept d'exécution. Il existe à l'intérieur de votre compilateur en tant que liaison lexicale entre le nom de la variable et un emplacement abstrait (mutable sinon const). Une fois qu'un programme est compilé, les variables ne sont plus là. Au lieu de cela, les données sont lues et écrites dans des registres, de la mémoire, etc.
int
. Le standard C ++ ne fait pas de distinction entre les types primitifs et les types non primitifs quand on parle de ce que font les déclarations de variables. T t;
Déclare donc un objet de type T
, quel que soit le type T
.
Ou bien «l'instance de quelque chose» est-elle strictement liée aux classes et aux objets? Si oui, comment définiriez-vous le concept de «variable» en ce qui concerne le C ++?
Pour le dire aussi concis que possible pour C ++
Juste pour être clair:
malloc()
tampon nouvellement édité mais non initialisé: c'est une zone de mémoire qui n'est pas encore un objet. De même, un objet qui a été explicitement détruit: c'est une région mémoire qui n'est plus un objet.
Eh bien, que signifie «correct»?
Si nous voulons être très stricts à ce sujet, nous devons faire la distinction entre:
Alors une variable-être une expression aurait avoir un type. Sa valeur - l'objet auquel il fait référence - serait une instance d'une classe. Et notez que le type de la variable et la classe de l'objet ne sont généralement pas la même chose - le type statique de la variable met une limite supérieure sur les classes d'exécution des objets, de sorte que les classes doivent être un sous - type de la classe qui correspond au type.
Voulez-vous répéter cette grosse bouchée tout le temps? Heck non. La façon dont nous voulons parler strictement ou vaguement dépend du contexte. Si souvent, il n'y a vraiment aucun problème à dire que "la variable est une instance de ce type". Ce qui se passe là-bas, c'est que nous utilisons la variable et le type métonymiquement pour faire référence à l'objet et à une superclasse de sa classe d'exécution.
A moins que vous ne vouliez passer votre vie entière dans le purisme et le sophisme ... oui.
Chaque fois que vous conservez quelque chose qui est identifié de façon unique, vous pouvez forger d' autres choses identifiables de manière unique que vous faites une instanciation.
Certaines de ces instanciations peuvent avoir des noms plus précis, mais en général cela fonctionne.
Beaucoup de gens réservent "instance" aux instances de classes. Si vous le faites alors en C ++, une variable pourrait être une instance d'une classe, une référence à une instance, un pointeur vers une instance ou un type primitif (vous compteriez probablement des structures comme classes dans ce contexte, elles sont presque complètement le même). En Java ou Objective-C, les variables ne seraient jamais des instances mais éventuellement des références à des instances.
Oublié: Pendant un court instant, un pointeur C ++ peut être un pointeur vers la mémoire brute, par exemple "ceci" avant que le constructeur ne commence à s'exécuter. Vous n'appeleriez probablement pas * this une instance pour l'instant.