• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ - różnica między operatorami: zasięgu (::), a wyłuskania (.)

Object Storage Arubacloud
0 głosów
3,324 wizyt
pytanie zadane 8 października 2018 w C i C++ przez MikeMG Początkujący (330 p.)

Witam serdecznie. Powtarzam sobie ostatnio obiektówkę C++, ale za nic nie mogę wyczuć różnicy pomiędzy tym, kiedy używa się operatora zasięgu (::), a kiedy operatora wyłuskania (.). Oba służą do wskazania, na czym chcemy pracować (np. metodę na rzecz jakiego obiektu wywołujemy itp.) Wyklaruje to ktoś zrozumiale? W jakich przypadkach używa się tego i tego? Z góry dziękuję za pomoc. :)

4 odpowiedzi

+2 głosów
odpowiedź 8 października 2018 przez monika90 Pasjonat (22,940 p.)
Po lewej stronie operatora . występuje wyrażenie którego wartością jest obiekt jakiejś klasy (struktury, unii).

Po lewej stronie operatora :: występuje nazwa klasy lub przestrzeni nazw (czasem nic), czyli nie jest to wyrażenie.

I to jest główna różnica.
+1 głos
odpowiedź 8 października 2018 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
'.' jest to operator, który pozwala używać wszystko co masz w class A { ... }

'::' jest to operator (?) zasięgu, czyli wskazujesz jaki namespace używasz, jest to głównie użyteczne przy dziedziczeniu gdy chcemy wybrać, czy używamy rodzica, czy dziecko:

 

class B : A

 

B.A::func() -> obiektem klasy B wywołujemy ('.') funkcję func(), ponieważ w zasięgu mamy func przeciążoną przez klasę B oraz func oryginalną z A wybieramy (bo chcemy) tą z A

B.B::func() -> tak jak wyżej, ale wybieramy z B

B.func() -> działa tak samo jak wyżej, bo z automatu ('.') powoduje, że jesteś w przestrzeni nazw, klasy, na której to wywołałeś
komentarz 8 października 2018 przez MikeMG Początkujący (330 p.)

Ach, rzeczywiście. operatora :: używa się chociażby przy użyciu przestrzeni nazw std (co zazwyczaj się pomija, dając using namespace std). Kropka z kolei jest tylko wtedy, gdy chcemy użyć czegoś na rzecz danego argumentu lub metody w jakieś funkcji. Dziękuję za pomoc. Spróbuję trochę popracować w kompilatorze i sobie to jakoś przyswoić.

0 głosów
odpowiedź 8 października 2018 przez Ditrix Mądrala (5,650 p.)
edycja 8 października 2018 przez Ditrix
Z tego co kojarzę to operator zasięgu służy do wskazania statycznych metod z poziomu samej klasy, a nie obiektu, albo statycznych zmiennych.

A operator wyłuskania do wskazywania obiektów i metod, z których korzysta obiekt.
1
komentarz 8 października 2018 przez RafalS VIP (122,820 p.)
Statycznych a nie stałych.
komentarz 8 października 2018 przez criss Mędrzec (172,590 p.)

Ja tu to tylko zostawie

albo stałych zmiennych

0 głosów
odpowiedź 8 października 2018 przez RafalS VIP (122,820 p.)

Operator '.' służy do wyciągania elementów (zmiennych składowych, metod) z pudełka (klasy, struktry, unii). Po lewej stronie stoi konkretna instancja: obiekt.element

Operator zakresu '::' służy do:
- korzystania z nazw zdefiniowanych w przestrzeniach nazw (np std::cout)
- wyciągania statycznych metod i składowych z funkcji / struktury, wtedy z lewej strony stoi nazwa samej klasy/struktury a nie obiektu. Uwaga do statycznych metod i składowych możesz odwołać się również przez obiekt.nazwa, aczkolwiek Klasa::nazwa jest preferowane, bo od razu widać, że wołujemy statyczny element i nie potrzebujemy instancji, żeby dobrać się do statycznych rzeczy.
- do odwołania się w ciele klasy pochodnej do składowych / metod z klasy bazowej nadpisanych w klasie pochodnej:

struct A {
	int a=1;
};

struct B : A {
	int a = A::a;
};

 

Podobne pytania

0 głosów
0 odpowiedzi 405 wizyt
0 głosów
1 odpowiedź 603 wizyt
pytanie zadane 21 sierpnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
1 odpowiedź 313 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...