Heim > Backend-Entwicklung > C++ > Was ist der Unterschied zwischen den Pointer-to-Member-Operatoren „->*' und „.*' von C?

Was ist der Unterschied zwischen den Pointer-to-Member-Operatoren „->*' und „.*' von C?

Linda Hamilton
Freigeben: 2024-11-19 04:24:03
Original
620 Leute haben es durchsucht

What's the Difference Between C  's `->*` und `.*` Zeiger-zu-Member-Operatoren?
*` und `.*` Zeiger-zu-Member-Operatoren? " />

Entmystifizierung der Pointer-to-Member-Operatoren -> und . in C

Obwohl Sie vorhandene Ressourcen erkundet haben, sind Sie möglicherweise immer noch verwirrt darüber rätselhafte -> und . Operatoren in C. Dieser Artikel soll Licht auf ihre wahre Natur werfen und klären, wann ihre Verwendung notwendig wird.

Den Zweck von Pointer-to verstehen -Member-Operatoren

Sowohl -> als auch . sind Zeiger-auf-Member-Operatoren, die den indirekten Zugriff auf Member-Funktionen ermöglichen eine Mitgliedsfunktion über einen Zeiger und nicht direkt von einem Objekt.

Syntax und Verwendung

  • ->: Dieser Operator wird verwendet, um einen Zeiger zu dereferenzieren, der auf eine Mitgliedsfunktion eines Objekts zeigt. Seine Syntax ist (ptr->member_func_ptr)().
  • .: Ähnlich wie -> dereferenziert dieser Operator auch einen Zeiger auf eine Mitgliedsfunktion. Er wird jedoch verwendet, wenn der Zeiger über den Zeiger oder die Klasse eines Objekts dereferenziert wird. Seine Syntax ist (object_ptr.*member_func_ptr)().

Verwendungszweck -> vs. .

  • ->*: Verwenden Sie diesen Operator, wenn Sie einen Zeiger auf eine Mitgliedsfunktion über einen Zeiger auf ein Objekt dereferenzieren.
  • .*: Verwenden Sie diesen Operator, wenn Sie dereferenzieren ein Zeiger auf eine Mitgliedsfunktion durch den Zeiger oder die Klasse eines Objekts.

Beispiel

Betrachten Sie eine Klasse X mit den folgenden Mitgliedsfunktionen: f() und g (). Angenommen, Sie haben einen Zeiger, der auf die Funktion f() zeigt:

struct X {
  void f() {}
  void g() {}
};

typedef void (X::*pointer)();
pointer somePointer = &X::f;
Nach dem Login kopieren

Um somePointer mit einem Objekt x aufzurufen, würden Sie Folgendes verwenden:

X x;
(x.*somePointer)(); // Calls x.f()
Nach dem Login kopieren

Wenn x kein Objekt ist Wenn Sie jedoch auf einen Zeiger auf ein Objekt verweisen, können Sie die Mitgliedsfunktion mit ->* wie folgt aufrufen:

X* px = new X;
(px->*somePointer)(); // Calls px->f()
Nach dem Login kopieren

Dieses Beispiel zeigt, dass die Verwendung von ->> oder . beim Zugriff von entscheidender Bedeutung ist Memberfunktionen indirekt über Zeiger, insbesondere beim Umgang mit Objekten, auf die verwiesen wird.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen den Pointer-to-Member-Operatoren „->*' und „.*' von C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage