Heim >Backend-Entwicklung >C++ >Warum funktioniert „bigCat.*pcat()' nicht beim Aufrufen von Mitgliedsfunktionen über Zeiger?

Warum funktioniert „bigCat.*pcat()' nicht beim Aufrufen von Mitgliedsfunktionen über Zeiger?

Linda Hamilton
Linda HamiltonOriginal
2024-12-15 16:42:15675Durchsuche

Why Doesn't `bigCat.*pcat()` Work When Calling Member Functions Through Pointers?

Aufrufen von Funktionen über Member-Funktionszeiger

Bei der Verwendung von Member-Funktionszeigern ist es wichtig, deren korrekten Aufruf sicherzustellen. Betrachten Sie den Beispielcode:

class cat {
public:
   void walk() {
      printf("cat is walking \n");
   }
};

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}

Beim Versuch, die Funktion mit bigCat.*pcat(); aufzurufen, tritt jedoch ein Fehler auf. Dies liegt daran, dass in der Funktionsaufrufsyntax zusätzliche Klammern erforderlich sind.

Korrekte Syntax zum Aufrufen von Mitgliedsfunktionszeigern

Um Mitgliedsfunktionen korrekt über Mitgliedsfunktionszeiger aufzurufen, sind die Klammern erforderlich Der Vorrang des Bedieners muss beachtet werden. Die korrekte Syntax für den Funktionsaufruf lautet:

(bigCat.*pcat)();

Dadurch wird sichergestellt, dass der Funktionsaufrufoperator (()) eine höhere Priorität hat als der Zeiger-zu-Member-Bindungsoperator (.*). Unäre Operatoren haben im Allgemeinen Vorrang vor binären Operatoren. Daher sind die Klammern erforderlich, um explizit anzugeben, dass die Mitgliedsfunktion walk() für das Objekt bigCat aufgerufen wird.

Mit der korrigierten Syntax wird der Code erfolgreich ausgeführt und gibt „cat is walk n“ aus Konsole.

Das obige ist der detaillierte Inhalt vonWarum funktioniert „bigCat.*pcat()' nicht beim Aufrufen von Mitgliedsfunktionen über Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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