„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man einen Mitgliedsfunktionszeiger in C ++ richtig aufrufen?

Wie kann man einen Mitgliedsfunktionszeiger in C ++ richtig aufrufen?

Gepostet am 2025-03-23
Durchsuche:962

How to Correctly Invoke a Member Function Pointer in C  ?

Mitgliedsfunktion Zeiger Invocation: Zerlegen der richtigen Syntax

Bei der Arbeit mit Member -Funktionszeigern ist es entscheidend, die richtige Syntax zu halten, um eine erfolgreiche Hinrichtung sicherzustellen. Lassen Sie uns mit einem typischen Problem auftreten, wenn versucht wird, eine Mitgliedsfunktion über einen Mitgliedsfunktionszeiger aufzurufen und die erforderliche Lösung anzugeben. öffentlich: void Walk () { printf ("Cat geht \ n"); } }; int main () { Katze Bigcat; void (cat ::*pcat) (); pcat = & cat :: Walk; BigCat.*pcat (); }

Kompilierungsfehler: The BigCat.*Pcat (); Die Aussage generiert einen Fehler.

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

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

Der Schlüssel zur Lösung dieses Problems liegt in der Sicherstellung des Ausdrucks BigCat.*pcat () hat die entsprechende Vorrang. Die Vorrangbetreiberin vorsieht, dass unarte Operatoren Vorrang vor binären Operatoren haben. Daher müssen Klammern den Funktionsaufruf () über die Bindungsoperation von Zeiger-zu-Mitgliedern priorisieren.*. (bigcat.*Pcat) (); ^ ^

den Funktionsanruf in Klammern einschließen, sorgt zuerst für die Ausführung, gefolgt von der Mitgliedsfunktion Zeiger. Operatoren.

(bigCat.*pcat)();
^            ^

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3