Witam. Proszę o proste wytłumaczenie do czego w klasach jest znak ::?
W klasach nie ma tej pary znaków.
To jest operator zakresu https://docs.microsoft.com/pl-pl/cpp/cpp/scope-resolution-operator?view=msvc-160
Tak chodziło o operator zakresu a możesz to jakoś prościej wytłumaczyć?
dzieki niemu mozesz zmieniac zakres (scope) w ktorym sie znajdujesz
Nikto0 napisał(a):
Tak chodziło o operator zakresu a możesz to jakoś prościej wytłumaczyć?
Tam są przykłady, nie wyobrażam sobie co może być prostszego niż przykład.
::
rozdziela nazwy tak jak /
(lub \
) rozdziela nazwy folderów w ścieżkach. Możesz traktować nazwy w C++ jakby były w folderach o nazwach ich przestrzeni nazw, jak chcesz użyć jakiejś innej, możesz odnieść się do niej bezpośrednio (np. std::string
to klasa string
w przestrzeni nazw std
relatywnej do obecnej)
@Nikto0: przypadkiem nie chodzi o to ze jak w klasie zadeklarujesz funkcję
class A{
public:
int funkcja_z_klasy_a();
};
to żeby ją zdefiniować na zewnątrz klasy musisz użyć ::
int A::funkcja_z_klasy_a()
{
return 1;
}
Łopatologicznie:
Jak mieszkasz w Polsce i wysyłasz list do kogoś w Polsce, to w adresie nie musisz wpisywać Polska (bo jesteś w tej samej przestrzeni nazw :-) ).
Podobnie z używaniem operatora zakresu ::
Gdy jesteś w tej samej przestrzeni nazw to odwołujesz się do obiektu/klasy/zmiennej/typu wpisując tylko jego nazwę, natomiast gdy to do czego się odwołujesz jest w innej przestrzeni nazw, to musisz się odwołać podając jej pełny adres a nie skrócony, czyli np tak:
przestrzenNazw::NazwaKlasy
zamiast tylko NazwaKlasy
Możesz też zadeklarować wcześniej z jakiej przestrzeni nazw chcesz korzystać (np. using namespace std;
) i wtedy nie musisz już pisać pełnej nazwy, bo kompilator już wie o jaką Ci chodzi. Przestrzenie nazw, są po to, by nie dochodziło do kolizji nazw. Np w USA też jest miejscowość o nazwie Warszawa.
Tak samo w Twoim kodzie może być np. klasa czy funkcja o identycznej nazwie jak w kodzie biblioteki z której chcesz korzystać. Aby te dwa byty odróżnić stosujemy właśnie przestrzenie nazw.