Podsumowanie reguł zakresu

Użycie nazwy musi być jednoznaczne w zakresie (do punktu, w którym jest określane przeciążenie). Jeśli nazwa oznacza funkcję, funkcja musi być jednoznaczna w odniesieniu do liczby i typu parametrów. Jeśli nazwa pozostanie jednoznaczna, zostaną zastosowane reguły dostępu do składowych.

Inicjatory konstruktorów

Inicjatory konstruktorów są oceniane w zakresie najbardziej zewnętrznego bloku konstruktora, dla którego są określone. W związku z tym mogą używać nazw parametrów konstruktora.

Nazwy globalne

Nazwa obiektu, funkcji lub modułu wyliczającego jest globalna, jeśli jest wprowadzana poza dowolną funkcją, klasą lub prefiksem operatora globalnego zakresu jednoargumentowego (::), a jeśli nie jest używana w połączeniu z żadnym z tych operatorów binarnych:

  • Rozpoznawanie zakresu (::)

  • Wybór elementu członkowskiego dla obiektów i odwołań (.)

  • Wybór elementu członkowskiego dla wskaźników (->)

Kwalifikowane nazwy

Nazwy używane z binarnym operatorem rozpoznawania zakresu (::) są nazywane "kwalifikowanymi nazwami". Nazwa określona po binarnym operatorie rozpoznawania zakresu musi być składową klasy określonej po lewej stronie operatora lub składowej jej klasy bazowej(es).

Nazwy określone po operatorze wyboru składowego (. lub ->) muszą być składowymi typu klasy obiektu określonego po lewej stronie operatora lub składowych jego klas bazowych. Nazwy określone po prawej stronie operatora zaznaczenia składowego (->) mogą być również obiektami innego typu klasy, pod warunkiem, że lewa strona obiektu -> jest obiektem klasy i że klasa definiuje przeciążony operator wyboru składowego (->), który ocenia wskaźnik do innego typu klasy. (Ta aprowizacja została omówiona bardziej szczegółowo w Dostęp do składowej klasy).

Kompilator wyszukuje nazwy w następującej kolejności, zatrzymując się, gdy nazwa zostanie znaleziona:

  1. Bieżący blok zakresu, jeśli nazwa jest używana wewnątrz funkcji; w przeciwnym przypadku, zakres globalny.

  2. Na zewnątrz przez każdy otaczający zakres bloku, w tym zakres funkcji najbardziej zewnętrznej (który obejmuje parametry funkcji).

  3. Jeśli nazwa jest używana wewnątrz funkcji składowej, to nazwa jest wyszukiwana w zakresie klasy.

  4. Nazwa jest wyszukiwana w klasach bazowych klasy.

  5. Przeszukiwany jest otaczający, zagnieżdżony zakres klasy (jeśli istnieje) oraz jego klasy podstawowe. Wyszukiwanie jest kontynuowane, dopóki nie zostanie przeszukany najbardziej zewnętrzny, otaczający zakres klasy.

  6. Przeszukiwany jest zakres globalny.

Jednakże, możesz wykonać następujące modyfikacje kolejności wyszukiwania:

  1. Nazwy poprzedzone operatorem :: wymuszają rozpoczęcie wyszukiwania od zakresu globalnego.

  2. Nazwy poprzedzone słowami kluczowymi , i wymuszają na kompilatorze classwyszukiwanie tylko nazw class, structlub union .unionstruct

  3. Nazwy po lewej stronie operatora rozpoznawania zakresu (::) mogą być tylko classnazwami , struct, namespacelub union .

Jeśli nazwa odwołuje się do niestatycznego elementu członkowskiego, ale jest używana w statycznej funkcji członkowskiej, to wygenerowany zostanie komunikat o błędzie. Podobnie, jeśli nazwa odnosi się do dowolnego niestatycznego elementu członkowskiego w otaczającej klasie, zostanie wygenerowany komunikat o błędzie, ponieważ zamknięte klasy nie mają ujęć wskaźników klasy this .

Nazwy parametrów funkcji

Nazwy parametrów funkcji w definicjach funkcji są uważane za w zakresie najbardziej zewnętrznego bloku funkcji. W związku z tym są to nazwy lokalne i opuszczają zakres po zakończeniu działania funkcji.

Nazwy parametrów funkcji w deklaracjach funkcji (prototypy) znajdują się w lokalnym zakresie deklaracji i wykraczają poza zakres na końcu deklaracji.

Parametry domyślne znajdują się w zakresie parametru, dla którego są one domyślne, zgodnie z opisem w poprzednich dwóch akapitach. Nie mogą jednak uzyskać dostępu do zmiennych lokalnych ani niestatycznych składowych klas. Parametry domyślne są oceniane w momencie wywołania funkcji, ale są oceniane w oryginalnym zakresie deklaracji funkcji. W związku z tym domyślne parametry funkcji składowych są zawsze oceniane w zakresie klasy.

Zobacz też

Dziedziczenie