La différence entre l'Objet et de l'instance : C++
J'ai suivi un certain nombre de postes, et enfin je peux tirer une conclusion que, lorsque nous
avoir quelque chose comme :
Person name;
name
est un objet de la classe person
.
Il devient exemple lors de l'instanciation :
name=new Person();
Je suis un débutant en C++, et pour l'instant j'ai vu que nous pouvons accéder aux fonctions et variables comme:
Person name;
name.getValue;
name.callFunction();
Nous n'avons pas besoin d'utiliser new
opérateur. Alors, pouvons-nous dire le facteur de différenciation entre un objet et de l'instance peut être ignoré en C++?
Voir stackoverflow.com/questions/10157122/... à propos de la création d'objets sur la pile ou le tas.
En C++, un objet est une région de stockage.
Les modalités de l'objet de l'instance et sont échangeables.
En C++, un objet est une région de stockage.
Les modalités de l'objet de l'instance et sont échangeables.
new
crée un segment de mémoire allouée objet sans automatique de la durée de stockage. Le type de retour de operator new()
est un pointeur.OriginalL'auteur joey rohan | 2014-03-05
Vous devez vous connecter pour publier un commentaire.
En C++ "objet" et "instance" sont utilisés presque interchangably.
Il y a une programmation générale modèle de conception de
class
etinstance
. Leclass
détient toutes les informations sur tousinstance
s queclass
.En C++ lorsque vous déclarez une
class
oustruct
, le compilateur fait le code qui décrit comment vous pouvez créer uneinstance
declass
, ce que la mise en page de données est, et fournit quelques méthodes qui peuvent être utilisées pour interagir avec cetteinstance
(jusqu'à et y compris la destruction).virtual
méthodes et à l'héritage, apparemment, se déplace de quelques-unes des méthodes et de la disposition de l'instance: mais la quantité est très limitée. Au lieu de cela, chaque instance détient des pointeurs versvirtual
de données de la classe. Dans certaines langues, vous pouvez faire des choses comme remplacer les méthodes d'une instance au moment de l'exécution: mais pas en C++.Lorsque vous créez une instance de cette
class
oustruct
, il peut être via une automatique nommé variable sur la pile (commeFoo f;
), un anonyme automatique variable nommée (commesome_function( Foo(17,22) )
), une instance sur le free store (commenew Foo(17, 22)
), ou par l'intermédiaire de placement-new
(qui est la façon dontstd::vector
etstd::make_shared
crée des instances).Point de prêter à confusion, il y a un autre parallèle
class
-instance
motif en C++ --class template
-class
. Leclass template
est leclass
, l'instanciation est l'instance. Letemplate
des arguments et des spécialisations indiquer comment, au moment de la compilation, vous pouvez la "construction" duclass
es. Le filtrage sur leclass template
de fournir une quantité limitée de propriétés qui ne sont pas liés aux instances ("propriétés de la classe" dans le modèle). (Sans doute le modèle de fonction-fonction est un autre exemple de modèle).Si vous regardez la C++1y proposition de concepts lite vous verrez, où l'objet de l'instance et peut signifier différentes choses en C++.
x
est à la fois un objet et une instance du typeint
.foo
est une instance du typeint&
, mais en l'appelantfoo
un objet est probablement faux! C'est une référence, un alias, qui est un autre nom pour un objet (dans ce casx
).bar
est un pointeur vers uneint
, qui est une instance de typeint*
, et en appelant un objet est probablement correct.C'est utile de faire la distinction: un type qui n'est pas pour désigner un type d'objet, si c'est un type de référence. Les types d'objets se comportent différemment des types de référence dans un certain nombre de façons importantes.
Maintenant, certains types de "référence sémantique", en ce qu'ils se comportent comme des références à de nombreux égards, mais qui sont en fait
class
es. Sont des instances de ce type de meilleures appelé références ou des objets? En d'horribles cas, certains cas ont un mélange à la fois de référence et l'objet de la sémantique: telle est souvent mauvais signe.Via dernière norme en 3,9 [Types de] nous avons des genres de types en C++. Ils décrivent ce qu'un type d'objet est:
et
Donc appeler le "cas" des choses qui sont fonction des types ou des types de référence "objets" semble incorrect. Notez que l'accès à la "représentation" d'une fonction ou d'une instance de référence est pratiquement impossible: références de l'alias dans l'objet auquel ils se réfèrent, et en utilisant le nom d'une fonction se désintègre à un pointeur de fonctions à la baisse d'un chapeau (et pointeurs-pour-une-fonction sont essentiellement opaque poignées qui permettent de les invoquer).
On peut donc soutenir que les fonctions ne sont pas des instances, et les références ne sont pas des instances.
Sur la troisième main, nous faisons parler les instanciations de
class
template
s et la fonctiontemplate
s. 14.7 est "instanciation du modèle et de la spécialisation", et les points de l'instanciation (d'untemplate
) sont tous les termes formels de la norme.Non, le standard ne semble pas parler des cas de non-types d'objet générique. Il se réfère à des objets et des références, mais je ne peux pas trouver un terme générique pour "instance d'un type" utilisé dans le standard...
OriginalL'auteur Yakk - Adam Nevraumont
Objet de l'instance et sont deux mots pour la même chose.
c'est discutable. Vous constaterez que beaucoup de programmeurs C++ parler des "objets". Autant que je me souvienne c'est aussi la préférée de la terminologie dans la norme (quelqu'un me corrige si je me trompe).
Je ne dis pas que vous devriez toujours dire "instance", je dis que Si vous dites "instance" ce que vous dites est à court de main pour "instance de [classe]". Et nous savons qu'une instance d'une classe est un objet. Donc, "instance" est égal à "objet".
OriginalL'auteur Jose
Tout d'abord, vous devez savoir qu'il n'y a pas de différence entre "objet" et "instance". Ils sont synonymes. En C++, vous pouvez également appeler les instances de types primitifs comme
int
oudouble
"objets". L'un des principes de conception de C++, c'est que des types personnalisés (c'est à dire les classes) peut être fait pour se comporter exactement comme les types primitifs. En fait, en C++, souvent, on préfère parler de "types" et pas de "classes".Donc, types et objets il doit être. Maintenant que nous avons réglé, je crains que je dois vous dire que vos conclusions sont fausses.
Person
est un type.name
est un (pas très bien nommé) de la variable d'accéder à un objet de ce type.Toute une ligne de code C++ devrait ressembler à ceci:
Ce qui signifie: "créer un objet de type Personne et laissez-moi d'y accéder via la variable de nom".
new Person()
est beaucoup plus compliqué. Vous connaissez peut-être lenew
mot clé de langues comme Java, mais en C++, c'est très différent de la bête. Cela signifie qu'un nouvel objet de typePerson
est créé, mais il signifie également que vous êtes responsable de la destruction il plus tard. Il vous donne également un autre type de handle de l'objet nouvellement créé: un soi-disant pointeur. UnPerson
pointeur ressemble à ceci:Un pointeur est un type, et les types
Person*
etPerson
ne sont pas compatibles. (Je vous ai dit que ce serait beaucoup plus compliqué :))Vous remarquerez l'incompatibilité lorsque vous essayez de compiler la ligne suivante:
Il ne compile pas; vous allez recevoir un message d'erreur. Vous devez faire comme ceci à la place:
Et ensuite, vous auriez accès à tous les membres de
Person
avec une syntaxe différente:Enfin, n'oubliez pas que vous devez explicitement détruire l'objet dans ce cas:
Si vous l'oubliez, de mauvaises choses peuvent arriver. Plus précisément, votre programme sera vraisemblablement de plus en plus de mémoire, plus il s'exécute.
Je pense que les pointeurs sont trop avancées pour votre niveau de C++ compréhension. Rester loin d'eux jusqu'à ce que vous réellement besoin d'eux.
À droite, il n'y a absolument aucune différence. Jetez un oeil à cette FAQ à partir de isocpp.org: isocpp.org/wiki/faq/classes-and-objects#overview-object
OriginalL'auteur Christian Hackl
"Objet" et "instance" sont presque interchangeables. En C++, un objet est officiellement une zone de stockage. "Instance" n'est pas formellement défini terme, mais nous avons généralement référence à "des instances de type
X
", le plus couramment utilisé avec les types de classe.Cette déclaration crée un objet nommé
f
. Le type de l'objet estFoo
. Vous pourriez dire que l'objetf
est une instance deFoo
.Votre tentative de distinguer les termes " était incorrect. Les deux choses que vous avez réellement souligné de deux différentes façons de créer des objets.
Dans ce cas, nous allons créer un objet
name
de typePerson
.Dans ce cas, nous allons créer un objet
name
de typePerson*
(pointeur dePerson
). Nous sommes également à la création d'un autre objet de typePerson
l'aide de l'expressionnew Person()
. Cette expression renvoie un pointeur, ce qui nous initialisation de laname
objet.Non, mais "instance" est beaucoup plus d'un Java terme. En Java, les gens ont tendance à parler de "cas de
X
" plutôt que "les objets de typeX
".OriginalL'auteur Joseph Mansfield
C'est très simple, mais très important
Prendre un exemple général: quelle est la signification générale de l'objet? sa n'a rien, mais qui occupe de l'espace à droite....gardez cela à l'esprit, nous avons maintenant de vous parler de l'Objet en java ou en C++
exemple: ici je suis en création d'Objet Étudiant std=new Etudiant();
où Étudiant est un Classe et std est un Objet parce que nous avons Créé une mémoire de mst avec l'aide de nouveau mot clé de moyens en interne occupe de l'espace dans la mémoire du droit, c'est y nous appelons std comme Objet
si vous ne pouvez pas créer de mémoire pour un objet de façon à ce que nous appelons objet comme instance.
exemple: l'Étudiant std;
ici Étudiant est une classe et std est un exemple(qui signifie tout simplement une copie de cette classe),avec ce que nous ne ferons rien jusqu'à moins de nous créer une mémoire.
C'est tout au sujet de l'objet et de l'Instance 🙂
OriginalL'auteur sushanth