Was ist der Unterschied zwischen dem Punktoperator (.) und -> in C++?
- Was kann ich statt des Pfeiloperators `->` verwenden? (7 Antworten )
Antworten
Zu viele Anzeigen?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.
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
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
- See previous answers
- Weitere Antworten anzeigen