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

Wskaźnik this

Object Storage Arubacloud
0 głosów
3,858 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez Wirus Stary wyjadacz (14,000 p.)

Wciąż nie wiem kiedy używać wskaźnika this. Mam tu taki przykład kiedy chcę wykorzystać wewnętrzną funkcję.

Może mi ktoś wyjaśnić poniższe różnice?

GButton::GButton(string cap, int x, int y,int posx, int posy) 
	: GComponent(cap,x,y,posx,posy)
{
	this->SetPos(posx,posy);
	//czy
	SetPos(posx, posy);
	//czy
	GButton::SetPos(posx, posy);
}

 

3 odpowiedzi

+1 głos
odpowiedź 18 czerwca 2015 przez daan Pasjonat (17,640 p.)
wybrane 18 czerwca 2015 przez Wirus
 
Najlepsza

Wskaźnik this jest wskaźnikiem na konkretną instancje klasy, jeżeli zrobisz dwa obiekty A i B to każdy z nich posiada swój wskaźnik this, który wskazuje na samego siebie, ale to zapewne wiesz, jeżeli chodzi o to kiedy go należy używać odpowiedź jest prosta - nie używaj nigdzie poza sytuacjami w której jest to konieczne, np. gdy parametr funkcji ma taką samą nazwe jak jedna z jej składowych :

class A
{
     int x;

     int func(int& x)
     {
           x = 5;
     }
}

Jak myślisz w tym wypadku, do której zmiennej x zapiszemy wartość 5 ? Tak, do tej którą przekazujemy do funkcji, aby zmienić x należącego do klasy A należy użyć wskaźnika this, (this->x = 5). W 99% innych sytuacji będzie on tylko zaciemniał kod. Oczywiscie jak funkcja nie przyjmuje parametru o takiej samej nazwie jak jedna z jej składowych to wskaźnik this jest niepotrzebny (ba, kompilator sam sobie go dopisze, więc nie musisz wgl o nim myśleć :P)

Inny przykład, czasami potrzebujemy zwrócić konkretną instancje klasy np. przy przeciążaniu operatorów :

Foo & operator++() 
{
    ++i;
    return *this;
}

W twoim przykładzie 2 pierwsze wywołania w ostateczności po kompilacji będą dokładnie tym samym, kompilator dopisze this tam gdzie potrzeba (obiekt GButton musi oczywiście posiadać metode SetPos), 3 wywołanie GButton::SetPos(posx, posy); raczej służy do wywoływania statycznych metod gdzieś poza klasą lub metod klas bazowych wewnątrz danej klasy :)

komentarz 18 czerwca 2015 przez Wirus Stary wyjadacz (14,000 p.)
Dzięki za taki mały artykuł. Po prostu 3 różne sposoby zapisu zniszczyły mi banie. Jeszcze raz dzięki.
+1 głos
odpowiedź 18 czerwca 2015 przez mistgun Początkujący (260 p.)
edycja 18 czerwca 2015 przez mistgun

Jest to raczej opcjonalne użycie, ktore określa 'zasięg' zmiennej do ktorej chcesz się odnieść. ( w głównej mierze zależy to od twoich upodobań, choc w Twoim przypadku odwolujesz sie do funkcji co jest niepoprawne, tak jak 3 przyklad)

Spójrz na przykład:

#include <iostream>

class Dog {
public:
    std::string name;
    Dog() {
        std::string name = "burek";
        this->name = "reks";
        
        std::cout << this->name;
    }
};

int main()
{
   Dog dog; // pokaze reks, bo odwołujemy się do "czlonka klasy"
   
   return 0;
}

Mam nadzieje, że jakoś pomoże Ci to zobrazować jak to działa.

 

Podobne pytania

0 głosów
1 odpowiedź 1,986 wizyt
pytanie zadane 11 kwietnia 2018 w C i C++ przez antek782 Początkujący (490 p.)
0 głosów
2 odpowiedzi 403 wizyt
pytanie zadane 1 kwietnia 2016 w C i C++ przez El Toro Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 491 wizyt

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 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!

...