Freigeben über


Namen und qualifizierte Namen

Namen, die mit dem binären Bereichsauflösungsoperator (::) verwendet werden, werden als "qualifizierte Namen" bezeichnet. Der Name, der nach dem binären Bereichsauflösungsoperator angegeben wird, muss einem Member der Klasse entsprechen, der auf der linken Seite des Operators angegeben oder ein Member der Basisklasse(n) ist.

Namen, die nach dem Memberauswahloperator (. oder –>) angegeben werden, müssen Member des Klassentyps des Objekts sein, das auf der linken Seite des Operators oder Members seiner Basisklasse angegeben wird. Namen, die rechts vom Memberauswahloperator (–>) angegeben werden, können auch Objekte eines anderen Klassentyps sein, sofern die linke Seite von –> ein Klassenobjekt ist und die Klasse einen überladenen Memberauswahloperator (–>) definiert, der zu einem Zeiger auf einen anderen Klassentyp ausgewertet wird. (Diese Bereitstellung wird unter Klassenmemberzugriff ausführlicher erläutert.)

Der Compiler sucht nach Namen in der folgenden Reihenfolge und hört auf, wenn der Name gefunden wird:

  1. Aktueller Blockgültigkeitsbereich, wenn der Name innerhalb einer Funktion verwendet wird; andernfalls globaler Gültigkeitsbereich.

  2. Nach außen durch jeden einschließenden Blockbereich, einschließlich des äußersten Gültigkeitsbereichs der Funktion (der Funktionsargumente enthält).

  3. Wenn der Name innerhalb einer Memberfunktion verwendet wird, wird der Gültigkeitsbereich der Klasse nach dem Namen durchsucht.

  4. Die Basisklassen der Klasse werden nach dem Namen durchsucht.

  5. Der einschließende, verschachtelte Klassenbereich (sofern vorhanden) und seine Basen werden durchsucht. Die Suche wird fortgesetzt, bis der äußerste einschließende Klassenbereich durchsucht wurde.

  6. Globaler Gültigkeitsbereich wird durchsucht.

Sie können jedoch wie folgt Änderungen an dieser Suchreihenfolge vornehmen:

  1. Namen, denen :: vorangestellt wird, zwingen die Suche, im globalen Gültigkeitsbereich zu starten.

  2. Namen, denen die Schlüsselwörter class, struct und union vorangestellt sind, zwingen den Compiler, nur nach den Namen class, struct oder union zu suchen.

  3. Namen auf der linken Seite des Bereichsauflösungsoperators (::) können nur die Namen class, struct, namespace oder union aufweisen.

Wenn der Name auf einen nicht statischen Member verweist, aber in einer statischen Memberfunktion verwendet wird, wird eine Fehlermeldung generiert. Und wenn der Name auf einen nicht statischen Member in einer einschließenden Klasse verweist, wird eine Fehlermeldung generiert, da eingeschlossene Klassen keinen this-Zeiger für einschließende Klassen besitzen.

Siehe auch

Referenz

Zusammenfassung der Bereichsregeln