C++ - Objekt der Klasse Zeiger und der Zugriff auf member-Funktionen
Ich bin etwas neu in C++ und versuchen, Dinge zu erarbeiten mit Qt und bin dabei auf diese verwirrende Sache:
Die Konzepte auf verschiedene tutorials Stand so etwas wie:
Class *obj;
*obj
- display wird der Wert des Objekts gespeichert, auf die verwiesen wird Speicher
obj
- wird die Adresse des Speichers, an die es gerichtet ist,
so, ich möchte etwas tun, wie
*obj=new Class();
aber wenn ich will, um eine Funktion zugreifen, ich habe zu tun obj->function1();
statt *obj->function1();
-- nicht sicher, warum, da Sie mit normalen Objekten [ normalObj.function1();
] funktionieren würde, da das der Wert direkt ein.
So, für Zeiger Objekte warum verwenden wir Speicher auf, um die Funktion aufzurufen,
oder ist es so, dass bei normalen Objekten auch, Ihr verweist immer auf
P. S: Kann jemand führe mich zu einem guten tutorial für die Verwendung von Zeigern in C++, so dass meine Anfragen wie diese können direkt angesprochen werden, es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
*
symbol wird verwendet, um zu definieren einen Zeiger und Dereferenzierung eines Zeigers. Zum Beispiel, wenn ich wollte einen Zeiger auf ein int, die ich tun könnte:int *ptr;
In diesem Beispiel, die
*
wird verwendet, um zu deklarieren, dass dies ein Zeiger auf eine int -. Nun, wenn Sie nicht deklarieren, die einen Zeiger und verwenden Sie die*
symbol mit Zeiger bereits deklariert ist, dann sind Sie dereferenzieren es. Wie Sie wahrscheinlich wissen, ein Zeiger ist nur eine Adresse. Wenn Sie Sie dereferenzieren einen Zeiger, Sie erhalten den Wert, wird darauf hingewiesen, dass durch Adresse. Zum Beispiel:Dieser wird ausgedruckt 5. Auch, wenn Sie bei der Zuordnung einen Zeiger auf eine neue Adresse und es ist nicht in der Erklärung, die Sie tun nicht Verwendung der
*
symbol. Also:ist, wie Sie es tun würde. Sie können auch die Ehrerbietung der Zeiger einen neuen Wert zuweisen, um den Wert zu wies zu der Adresse. Wie:
Nun
->
wirkt wie die Rücksicht symbol. Es wird dereferenzieren Sie die Zeiger, und dann verwenden Sie die member-Funktionen und-Variablen als wenn Sie verwendet hatte.
mit einem nicht-pointer-Objekt. Auch mit einem Objekt, nicht einen Zeiger, die Sie verwenden können, die->
indem Sie zuerst immer die Adresse:Das ist nur ein kurzer überblick über Zeiger, hoffe es hilft.
Können Sie mit der "normalen"
.
Zugriff auf die Objekte-Mitglieder, aber Sie haben zu dereferenzieren Sie die Zeiger zuerst.Durch die Operatorrangfolge, das sieht
(*obj).member
. Für diejenigen, die denken, das ist zu viel zu schreiben,obj->member
ist eine kürzere alternative.Wenn Sie ein Objekt
c
TypClass
,*c.ptr
bedeutet dereferenzieren einen Zeigerptr
MitgliedClass
. Das ist ein Grund für(*obj).member
, die etwas anderes bedeutet.Tatsächlich, Sie sind falsch. Sie:
oder
völlig unterschiedlich.
nicht kompilieren.
obj
ist der TypClass*
, so dass das, was Sie zuordnen können (und wasnew Class
gibt).Genauer u tun können, wie diese