Pfeiloperator vs. Punktoperator in C++

Shikha Chaudhary 12 Oktober 2023
  1. der Punktoperator (.) in C++
  2. der Pfeiloperator (->) in C++
  3. Pfeiloperator vs. Punktoperator in C++
  4. Abschluss
Pfeiloperator vs. Punktoperator in C++

Um auf die Klassenmember in C++ zuzugreifen, verwenden wir sowohl den Punkt- als auch den Pfeiloperator. Das heißt aber nicht, dass beide gleich sind.

Es gibt einige Unterschiede zwischen diesen beiden Operatoren, die wir in diesem Artikel betrachten werden. In diesem Artikel werden Klassen-, Vereinigungs- und Strukturtypen alle als Klassentyp behandelt.

Um zu verstehen, wie sich der Punktoperator vom Pfeiloperator unterscheidet, wollen wir uns zunächst die Grundlagen dieser beiden Operatoren ansehen.

der Punktoperator (.) in C++

Der Punktoperator (.) in C++, der auch als Klassenmember-Zugriffsoperator bekannt ist, hilft beim Zugriff auf die öffentlichen Member einer bestimmten Klasse. Öffentliche Mitglieder sind hier nichts anderes als die Variablen und Methoden einer Klasse.

Syntax:

name_of_object.name_of_member;

Schauen wir uns ein Beispiel an und sehen, wie der Punktoperator funktioniert.

Im folgenden Beispiel hat die Klasse desserts ein privates Datenmember, cakes, und zwei öffentliche Memberfunktionen, init() und display(), zusammen mit einem öffentlichen Datenmember, chocolates.

Jetzt können wir den Punktoperator verwenden, um auf bestimmte Variablen und Funktionen zuzugreifen und einer Variablen Werte zuzuweisen. Beachten Sie, dass wir innerhalb der Funktion main() den Punktoperator an den folgenden Stellen verwenden:

  1. Dem privaten Datenmember cakes über die öffentliche Memberfunktion init() den Wert 100 zuweisen.
  2. Weisen Sie dem öffentlichen Datenelement chocolates den Wert 200 zu.
  3. Um auf die öffentliche Member-Funktion zuzugreifen, display().

Beispielcode:

#include <iostream>
using namespace std;

class desserts {
 private:
  int cakes;

 public:
  int chocolates;
  void init(int cakes) { this->cakes = cakes; }
  void display() { cout << "Number of cakes: " << cakes << endl; }
};

int main() {
  // object declaration
  desserts q;
  // assign the values
  q.init(100);
  q.chocolates = 200;

  // print the values
  q.display();
  cout << "Number of chocolates: " << q.chocolates << endl;

  return 0;
}

Ausgang:

Number of cakes: 100
Number of chocolates: 200

So verwenden wir den Punktoperator in C++. Lassen Sie uns nun sehen, wie der Pfeiloperator funktioniert.

der Pfeiloperator (->) in C++

Um auf die Elemente einer Struktur oder einer Union zuzugreifen, verwenden wir in C++ den Pfeiloperator (->). Der Pfeiloperator verwendet eine Zeigervariable, die auf eine Struktur oder eine Vereinigung zeigt.

Syntax:

(name_of_pointer)->(name_of_variable)

Schauen wir uns ein Beispiel an und sehen, wie der Pfeiloperator funktioniert. Denken Sie daran, dass es sowohl mit einer Struktur als auch mit einer Union funktioniert.

In diesem Beispiel verwenden wir den Pfeiloperator in einer Struktur. Hier hat die Struktur desserts zwei Mitglieder, Flavour und number.

Diese Struktur hat ein Objekt namens items. Dann verwenden wir innerhalb des main-Blocks den Pfeiloperator, um der Variablen number den Wert 2 zuzuweisen.

Außerdem verwenden wir den Pfeiloperator, um auf den Wert der Variablen number zuzugreifen und ihn auszudrucken. So arbeitet ein Pfeiloperator im Wesentlichen mit einer Struktur.

Beispielcode:

#include <iostream>
using namespace std;

struct desserts {
  char flavor[50];
  int number;
};

// Create the object of the structure
struct desserts* item = NULL;

int main() {
  item = (struct desserts*)malloc(sizeof(struct desserts));

  // use arrow operator to assign value
  item->number = 2;

  cout << "The number of items: " << item->number;

  return 0;
}

Ausgang:

The number of items: 2

Sehen wir uns ein weiteres Beispiel an, in dem der Pfeiloperator in einer Vereinigung verwendet wird. Hier hat die Gewerkschaft desserts zwei Mitglieder, Flavour und number.

Diese Union hat ein Objekt namens items. Dann verwenden wir innerhalb des main-Blocks den Pfeiloperator, um der Variablen number einen Wert zuzuweisen.

Außerdem verwenden wir den Pfeiloperator, um auf den Wert der Variablen number zuzugreifen und ihn auszudrucken. Beachten Sie, dass der Pfeiloperator in einer Union genauso funktioniert wie in einer Struktur.

Beispielcode:

#include <iostream>
using namespace std;

// union
union desserts {
  char flavor[50];
  int number;
};

union desserts* item = NULL;

int main() {
  item = (union desserts*)malloc(sizeof(union desserts));

  item->number = 5;
  cout << "The number of items:" << item->number;
}

Ausgang:

The number of items: 5

Pfeiloperator vs. Punktoperator in C++

Nachdem wir nun die Grundlagen der Punkt- und Pfeiloperatoren in C++ behandelt haben, ist es an der Zeit, tiefer einzutauchen und ihre Unterschiede zu sehen. Hier ist eine Liste aller Unterschiede zwischen dem Punkt- und dem Pfeiloperator, die Sie kennen müssen:

  1. Der Punkt-Operator (.) greift direkt auf die Elemente einer Klasse zu, während ein Pfeil-Operator (->) dafür einen Zeiger verwendet. So sieht der direkte Zugriff auf ein Element aus:

    object_name.element
    

    Um andererseits mit einem Zeiger auf ein Element zuzugreifen, gehen wir wie folgt vor:

    pointer->element
    

    Das bedeutet, dass ein Punktoperator (.) mit Objekten verwendet wird, während ein Pfeiloperator mit Zeigern verwendet wird, die auf Objekte zeigen. Nehmen wir ein Beispiel, um dies besser zu verstehen.

    Angenommen, wir haben ein Objekt Demo und wir möchten eine seiner Methoden test() nennen. Dazu verwenden wir den Punktoperator (.) wie folgt:

    Demo.test()
    

    Wenn wir stattdessen den Pfeiloperator verwenden, würde dies nicht dasselbe bedeuten. Hier ruft der folgende Code die Methode test() nicht für das Objekt Demo auf, sondern für das Objekt, auf das der Zeiger Demo zeigt.

    Dies liegt daran, dass der Pfeiloperator zuerst den Zeiger dereferenziert, damit wir zu dem Objekt gehen können, auf das er zeigt.

    Demo->test
    
  2. Anders als beim Pfeiloperator (->) können wir keinen Punktoperator (.) auf Zeiger anwenden. Beachten Sie, dass (*p).element äquivalent zu p->element ist.

    Diese Klammer innerhalb von (*p).element wird verwendet, weil die Priorität des Punktoperators (.) höher ist als *. Um also zuerst * auszuwerten, verwenden wir Klammern.

    Der beste Weg, dies zu vereinfachen, besteht jedoch darin, diesen gesamten Teil – (*p) – durch einen Zeiger wie p-> zu ersetzen, damit es keine Verwirrung über den Vorrang gibt.

  3. Wir können einen Punktoperator (.) nicht überladen, während wir einen Pfeiloperator (->) in C++ überladen können. Weitere Informationen zum Überladen von Operatoren in C++ finden Sie in dieser Dokumentation.

Hier ging es darum, wie sich der Punkt- und der Pfeiloperator unterscheiden.

Abschluss

In diesem Artikel haben wir die Grundlagen des Punkt- und des Pfeiloperators besprochen und gesehen, wie sie sich unterscheiden. Wir haben gesehen, wie der Pfeiloperator eine Erweiterung von Klammern und Punktoperatoren ist und wie er sich auf die Funktionsweise dieser beiden auswirkt.

Verwandter Artikel - C++ Operator