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

Wskaźnik this

VPS Starter Arubacloud
0 głosów
3,842 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez Wirus Stary wyjadacz (13,980 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 (13,980 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,978 wizyt
pytanie zadane 11 kwietnia 2018 w C i C++ przez antek782 Początkujący (490 p.)
0 głosów
2 odpowiedzi 401 wizyt
pytanie zadane 1 kwietnia 2016 w C i C++ przez El Toro Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 474 wizyt

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...