La classe C++ pointeurs d'objet et d'accéder à des fonctions de membre du
Je suis peu nouveau pour C++ et d'essayer d'arranger les choses avec Qt et est venu à travers ce qui prête à confusion:
Les notions sur les différents tutoriels quelque chose comme:
Class *obj;
*obj
- affiche la valeur de l'objet stocké à l'référencé la mémoire
obj
- sera l'adresse de la mémoire à laquelle elle est orientée vers le
donc, je ferais quelque chose comme
*obj=new Class();
mais si je veux accéder à une fonction, que j'ai à faire obj->function1();
au lieu de *obj->function1();
-- je ne sais pas pourquoi, depuis, les objets normaux [ normalObj.function1();
], puisque c'est directement la valeur.
Donc, pour le pointeur objets pourquoi utilisons-nous la mémoire de référence pour accéder à la fonction,
ou est-ce que dans le cas d'objets normaux aussi, sa fait toujours référence à
P. S: quelqu'un Peut-il me guider vers un bon tuto sur l'utilisation des pointeurs en C++, de sorte que mes questions comme celles-ci peuvent être traitées directement dans.
OriginalL'auteur rock_win | 2012-07-07
Vous devez vous connecter pour publier un commentaire.
La
*
symbole est utilisé pour définir un pointeur et de déréférencer un pointeur. Par exemple, si je voulais créer un pointeur vers un int, je pourrais faire:int *ptr;
Dans cet exemple, le
*
est utilisé pour déclarer que c'est un pointeur vers un int. Maintenant, quand vous n'êtes pas déclarer un pointeur et que vous utilisez le*
symbole avec une déjà déclaré pointeur, alors vous êtes un déréférencement. Comme vous le savez probablement, un pointeur est tout simplement une adresse. Lorsque vous déréférencement d'un pointeur, vous êtes l'obtention de la valeur qui est pointé par cette adresse. Par exemple:Ce sera imprimée, 5. Aussi, si vous êtes l'affectation d'un pointeur vers une nouvelle adresse, et ce n'est pas dans la déclaration, vous ne pas utiliser le
*
symbole. Donc:est de savoir comment vous le feriez. Vous pouvez également déférence le pointeur d'affecter une nouvelle valeur à la valeur pointée par l'adresse. Tels que:
Maintenant,
->
actes comme la déférence symbole. Il déréférencer le pointeur, puis utilisez les fonctions de membre et de variables, comme si vous aviez utilisé.
avec un non-pointeur de l'objet. Même avec un objet qui n'est pas un pointeur, vous pouvez utiliser le->
par abord obtenir l'adresse:C'est juste un bref aperçu de pointeurs, espérons que cela aide.
OriginalL'auteur Yokatta24
En fait, vous avez tort. Vous n':
ou
qui sont complètement différentes.
ne compile pas.
obj
est de typeClass*
, c'est ce que vous pouvez attribuer à elle (et cenew Class
retours).OriginalL'auteur Luchian Grigore
Vous pouvez utiliser la fonction "normale"
.
pour accéder aux objets membres, mais vous avez à déréférencer le pointeur de la première.En raison de la priorité de l'opérateur, cela va ressembler à
(*obj).member
. Pour ceux qui pense que c'est trop à écrire,obj->member
est une alternative plus courte.Si vous avez un objet
c
de typeClass
,*c.ptr
signifie déréférencement d'un pointeur deptr
qui est un membre deClass
. C'est une des raisons pour(*obj).member
, ce qui signifie quelque chose d'autre.OriginalL'auteur Bo Persson
Plus précisément u peut faire comme ceci
OriginalL'auteur Vikas Rao