Argumentübereinstimmung und der this-Zeiger
Klassenmemberfunktionen werden unterschiedlich behandelt, je nachdem, ob sie als static deklariert werden. Da nicht statische Funktionen über ein implizites Argument verfügen, das den this-Zeiger bereitstellt, gelten nicht statische Funktionen als mit einem weiterem Argument ausgestattet als statische Funktionen; andernfalls werden sie genauso deklariert.
Diese nicht statischen Memberfunktionen erfordern, dass der implizite this-Zeiger dem Objekttyp entspricht, über den die Funktion aufgerufen wurde, oder für überladene Operatoren, dass das erste Argument dem Objekt entspricht, auf das der Operator angewendet wird. (Weitere Informationen zu überladenen Operatoren finden Sie unter Überladene Operatoren).
Im Gegensatz zu anderen Argumenten in überladenen Funktionen werden keine temporären Objekte eingeführt und keine Konvertierungen angestrebt, wenn versucht wird, mit dem this-Zeigerargument übereinzustimmen.
Wenn der – >-Memberauswahloperator verwendet wird, um auf eine Memberfunktion zuzugreifen, hat das this-Zeigerargument den Typ class-name * const. Wenn die Member als const oder volatile deklariert werden, sind die Typen const class-name* const bzw. volatile class-name * const.
Der Memberauswahloperator . funktioniert genau auf die gleiche Weise, außer dass ein impliziter &-Operator (address-of) dem Objektnamen vorangestellt ist. Im folgenden Beispiel wird gezeigt, wie dies funktioniert:
// Expression encountered in code
obj.name
// How the compiler treats it
(&obj)->name
Der linke Operand der Operatoren –>* und .* (Zeiger auf Member) wird hinsichtlich der Argumentübereinstimmung genauso wie der .-Operator und der –>-Operator (Memberauswahl) behandelt.