375 Stimmen

Was ist der Unterschied zwischen dem Punktoperator (.) und -> in C++?

Was ist der Unterschied zwischen dem Punktoperator (.) und -> in C++?

2voto

Ali Parr Punkte 4677

Das -> ist einfach ein syntaktischer Zucker für eine Zeigerdereferenz,

Wie andere gesagt haben:

pointer->method();

ist eine einfache Methode zu sagen:

(*Zeiger).methode();

Mehr Spaß mit Pointers gibt es bei Binky und seinem Zauberstab der Dereferenzierung:

http://www.youtube.com/watch?v=UvoHwFvAvQE

2voto

Mads Engberg Punkte 21

Der einfachste Unterschied zwischen den beiden ist, dass "->" einen Zeiger dereferenziert, bevor es sich die Felder, Funktionen usw. des Objekts ansieht, während "." nicht zuerst dereferenziert. Verwenden Sie "->", wenn Sie einen Zeiger auf ein Objekt haben, und verwenden Sie ".", wenn Sie mit der tatsächlichen Instanz eines Objekts arbeiten.

Eine andere äquivalente Art, dies zu tun, könnte darin bestehen, zuerst die Dereferenzierung "*" auf den Zeiger zu verwenden und dann nur das "." zu benutzen. Wir überspringen den Mittelsmann, indem wir "->" verwenden.

Es gibt noch weitere Unterschiede, aber das wurde in den anderen Antworten bereits ausführlich behandelt.

Wenn Sie sich mit Java auskennen, könnte Sie das verwirren, denn in Java besteht alles aus Zeigern. Das bedeutet, dass es keinen Grund gibt, ein Symbol zu haben, das nicht zuerst Ihren Zeiger dereferenziert. In C++ hingegen müssen Sie ein wenig vorsichtiger sein, wenn Sie sich merken wollen, was ein Zeiger ist und was nicht, und es könnte eine gute Idee sein, sie mit dem Präfix "p_" oder einfach "p" zu kennzeichnen.

1voto

Samuel Carrijo Punkte 16743

Der Operator . (Punkt) wird in der Regel verwendet, um ein Feld abzurufen bzw. eine Methode einer Klasseninstanz (oder ein statisches Feld bzw. eine statische Methode einer Klasse) aufzurufen.

p.myField, p.myMethod() - p Instanz einer Klasse

Der Operator -> (Pfeil) wird verwendet, um ein Feld abzurufen bzw. eine Methode aus dem Inhalt aufzurufen, auf den die Klasse verweist.

p->myField, p->myMethod() - p zeigt auf eine Klasse

1voto

PYA Punkte 6948

Der ->-Operator wird verwendet, wenn wir mit einem Zeiger arbeiten, und der Punkt wird sonst verwendet. Wenn wir also eine struct-Klasse haben wie:

struct class{ int num_students; int yr_grad; };

und wir haben eine Instanz einer Klasse* curr_class (Klassenzeiger), dann würden wir, um Zugriff auf die Anzahl der Schüler zu erhalten, Folgendes tun

cout << curr_class->num_students << endl;

Wenn wir ein einfaches Klassenobjekt, z. B. class_2016, hätten, würden wir Folgendes tun

cout << class_2016.num_students << endl;

Für den Zeiger auf die Klasse ist der ->-Operator äquivalent zu

(*obj).mem_var

Hinweis: Bei einer Klasse ist der Zugriff auf die Mitgliedsfunktionen der Klasse ebenfalls auf die gleiche Weise möglich

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X