0
votes

qu'est-ce que cela signifie réellement quand nous disons "initialiser l'objet" en c ++?

J'ai essayé de le rechercher ... mais je pense que tout est un objet en C ++ .... comme (int, float) sont des objets scalaires..etc.

Mais lorsque nous créons l'instance de classe, la documentation fait référence à "initialiser un objet avec le constructeur" en c ++. Qu'est-ce que cela signifie réellement?


10 commentaires

très lié / peut duper: stackoverflow.com/questions/2218254/… < / a>. Je cherche plus


Voir également: stackoverflow.com/questions/1613341/...


L'article de wikipedia sur l'initialisation vaut probablement la peine d'être lu: en.m.wikipedia.org/ wiki / Initialization_ (programmation)


initialiser = définir la valeur initiale; object = mémoire contenant une instance d'une classe


int et float sont des types intégrés. struct A {}; A est également un type, un type défini par l'utilisateur. Ce n'est pas un objet. Un objet est une instance d'une classe. A a; a est l'objet, A est le type. Lorsque vous initialisez un objet, cela signifie que vous l'instanciez (au moyen d'un constructeur de classe). Un objet est initialisé lorsque vous lui donnez une valeur initiale. Exemple: std :: vector {1,2,3};


@MFnx vous voulez dire que int et float ne sont pas des objets?


@sparshgoyal int et float sont des types, et en particulier des types intégrés. Un objet est une instance d'une classe. int et float ne sont pas vraiment des classes. Supposons que int et float sont des classes, alors dans la déclaration int i; ou float f; i et f sont des objets, int et float sont des types.


voir ceci, stackoverflow.com/ questions / 14821936 /…


À quelle «documentation» faites-vous référence exactement?


@MFnx La façon dont le standard C ++ utilise "objet", les variables de types scalaires comme int ou float sont également considérées comme des objets, pas seulement des types de classe. Leurs initialisations n'utilisent pas de constructeurs.


3 Réponses :


-2
votes

La création d'un objet en C ++ comporte 2 étapes:

1) trouver de la mémoire pour contenir l'objet.

Cela peut être un espace dans le cadre de pile de la fonction pour les objets locaux ou la section de données pour les objets globaux. Dans ces cas, le compilateur s'occupe de cela. Ou operator new est utilisé pour créer dynamiquement un objet et allouer de la mémoire. Ce qui est le cas si vous écrivez "new Foo ()" n'importe où.

2) "initialiser un objet avec le constructeur"

Cela signifie simplement que le constructeur est appelé. L'adresse de l'étape 1 est transmise en tant que this au constructeur et à tous les arguments que vous avez spécifiés également. Si vous n'avez pas de constructeur, le constructeur par défaut est utilisé lorsque cela est possible.


5 commentaires

Vous avez quelques hypothèses sur la "localisation" en cours ici.


"Cela signifie simplement que le constructeur s'appelle" Non, cela signifie bien plus que cela.


Toute la prémisse de la question est l'initialisation des int s et float et comment cela fonctionne avec la définition d '"objet"


Pas comme je l'ai lu. Il a dit instance de classe pour la deuxième strophe. Je ne considère pas ses cours. Mais si vous voulez étendre cela, une façon de voir est que int, float, ... ont un constructeur vide qui ne fait simplement rien.


Oui, et tout l'intérêt du deuxième paragraphe est qu'il contraste avec le premier dans lequel il nomme spécifiquement les int et les float . Et non, les int et les float n'ont pas de "constructeur vide".



4
votes

Je pense que tout est un objet en c ++

Selon la lettre de la norme, un "objet" est "une région de stockage". Vous pouvez lire les détails sous [intro.object] .

Mais en termes simples, oui, vous avez raison.

comme (int, float) sont des objets scalaires..etc.

Absolument. Un int est un objet. Un float est un objet.

(Bien sûr, int et float sont eux-mêmes des types .)

Mais lorsque nous créons l'instance de classe, la documentation fait référence à "initialiser un objet avec le constructeur" en c ++.

Il n'y a rien de mal à cela. Vous pouvez initialiser un int , et vous pouvez initialiser un float , et vous pouvez initialiser un objet de type classe. Pour ce dernier cas, une façon de procéder consiste à utiliser un constructeur. Cela ne change rien.

Qu'est-ce que cela signifie réellement?

Exactement ce qu'il dit: effectuer les étapes nécessaires pour donner à un objet une valeur initiale.

Je vous préviens également qu'il y a beaucoup de mauvaise "documentation" (notamment des didacticiels médiocres, etc.) pour C ++ sur le Web, il est donc également possible que vous ayez rencontré des mots mal formulés ou carrément incorrects. texte. Notez que, même dans la section des commentaires sous votre question, certaines personnes se sont trompées.


0 commentaires

1
votes

tout est un objet en c ++ .... comme (int, float) sont scalaires objets

C'est faux. int et float sont des types intégrés. L'utilisateur peut définir ses propres types, comme par exemple:

std::vector<int> v {1,2,3}

Ici, A est un type défini par l'utilisateur. Ce n'est pas un objet!

Un objet est une instance d'un type:

A a;
int i;

Ici, a et i sont des objets de type A et int . Lorsque vous initialisez un objet de type A , cela signifie que vous instanciez la classe A et l'initialisez en appelant l'un des constructeurs de classe.

Autre exemple:

struct A {};

Ici, l'objet v de type std::vector est initialisé avec les valeurs {1,2,3} , en appelant le constructeur de la classe std::vector.


12 commentaires

@LightnessRacesinOrbit Une référence pour cette déclaration? D'après cela, je pense que j'ai raison. stackoverflow.com/questions/22206044/… < / a>


@Caleth Oui exactement. x est un objet et une instance. Je pense que c'est ce que je dis.


@LightnessRacesinOrbit Je pense que MFnx dit que int est un type . Les instances de int sont des objets


D'accord, ce libellé est beaucoup plus clair. Avant, cela ressemblait à ce que vous disiez que a int n'est pas un objet. D'un autre côté, je pense qu'il est clair que l'OP signifiait des instances, pas les types eux-mêmes.


Exactement. Comment int peut-il être un objet? "Un int", étant, un objet de type int, est un obj. Mais "int" n'est pas un objet pour autant que je sache. J'ai eu un vote négatif à peine là lol à cause de "un int" vs "int" lol.


Je pense que vous lisez simplement la question de manière trop pédante: P La version originale de votre réponse se lit assez lourdement comme si une chose devait être de type classe pour être considérée comme un objet. Ça va mieux maintenant. +1


Pourtant, j'ai changé "Un objet est une instance d'une classe" en "Un objet est une instance d'un type", pour éviter toute confusion.


@LightnessRacesinOrbit Pédantiquement peut-être :) Mais si vous parlez avec quelqu'un qui dit objet, quand il fait référence à une classe, c'est vraiment déroutant (cela m'est arrivé plus d'une fois).


@aschepler Êtes-vous sûr? L'instanciation d'un type semble bizarre, ou est-ce correct?


Eh bien, «instancier» signifie autre chose en C ++, lié aux modèles. "Instance" n'est pas un terme technique formel, mais je pense que cela semble bien de dire que i est une instance du type int . Plus techniquement, nous dirions que i est une variable de type int , qui nomme un objet de type int .


foo a; est lu comme "a est une instance de l'objet foo", foo est également le type de données utilisateur. Donc, int est aussi un objet.


@seccpur je ne suis pas d'accord.