Programmieren lernen: Was ist der Unterschied zwischen dem Punktoperator (.) Und -> in C ++? [Duplikat]?


Antwort 1:

Der Punktoperator ermöglicht den Zugriff auf ein Objektelement, bei dem der linke Operand ein Objektname oder eine Referenz auf ein Objekt ist. Der Pfeiloperator ermöglicht den Zugriff auf ein Mitglied eines Objekts, auf das der linke Operand zeigt (ein einfacher Zeiger).

Darüber hinaus kann der Pfeiloperator überladen sein. Wenn der linke Operand also kein einfacher Zeiger, sondern ein Objekt ist, hat der Operator möglicherweise eine andere Bedeutung. Das Ergebnis muss jedoch ein einfacher Zeiger oder ein Verweis auf ein vorhandenes Objekt sein (für das auch der Zugriffsoperator definiert ist). Syntaktisch muss der rechte Operand ein Mitglied (ein Bezeichner eines vorhandenen Mitglieds) dieses Objekts sein.

Ein gutes Beispiel für eine sinnvolle Überlastung des Pfeiloperators sind intelligente Zeiger. Hierbei handelt es sich um Klassen, die einen einfachen Zeiger umschließen und mehr Funktionen hinzufügen (eindeutige Eigentümerschaft des dynamischen Objekts oder Referenzzählung). Bei intelligenten Zeigern ist der Pfeiloperator überladen. Sie können ihn also verwenden, um auf das darunterliegende Objekt zuzugreifen, genau wie Sie es bei einem einfachen Zeiger auf dieses Objekt tun würden.


Antwort 2:

Ich werde Sie in einfachen Worten sagen ...

Verwenden Sie den Punktoperator und, um auf Mitglieder einer Struktur zuzugreifen

Verwenden Sie den Pfeiloperator, um über einen Zeiger auf Elemente einer Struktur zuzugreifen.

Betrachten Sie zum Beispiel die folgende Struktur ………

struktur student {
  int regNo;
  char name [25];
} std;

Um dem Namenselement des Objekts std den Wert "suhail" zuzuweisen, schreiben Sie Folgendes:

strcpy (Standardname, "suhail");

Wenn ptr_std ein Zeiger auf ein Objekt vom Typ student ist und Sie dem Namensteil des Objekts std den Wert "suhail" zuweisen, müssen Sie folgendermaßen schreiben ...

strcpy (ptr_std-> name, "suhail");

Antwort 3:

Der Zeigeroperator ist der sogenannte syntaktische Zucker: etwas, das nicht wirklich notwendig ist, aber das Programm einfacher zu tippen und zu lesen macht. Die Aussage

p-> Feld

ist identisch mit

(* p) .field

wenn p tatsächlich ein Zeiger ist. Wenn es sich um ein Objekt handelt, ruft der Compiler stattdessen die operator -> () -Methode für das Objekt auf.