wskaźnik this

0

Nie do końca rozumiem działanie wskaźnika this.
znalazłem taki przykład:

struct X 
{
private:
int a;
public:
void Set_a(int a)
{

this->a = a;
}
}

Z tego co czytałem zrozumiałem, że przyporządkowuje atrybut a do zmiennej o większym zasięgu, ale o tej samej nazwie czyli też a, ale równie dobrze można by skorzystać z wcześniej utworzonej zmiennej a:

void Set_a(a)
1

Wykorzystywanie this w tym wypadku jest niezbyt potrzebne. This pokazuje na element tej struktury. W tym wypadku jesli nie możesz zmienić nazwy zmiennej, ona przykrywa zmienną z struktury, przez co musisz się do niej odwoływać przez this.

1

Że co? this to wskaźnik pokazujący na obiekt na którym wlaśnie pracujesz. Te wszystkie pola (w twoim przypadku jedno pole, zmienna int o nazwie a) są składnikami tego obiektu.
Jeśli wewnątrz metody masz zmienną lokalną o takiej samej nazwie jak pole klasy to następuje zwykłe przesłanianie, tzn odnosząc się do zmiennej po nazwie będziesz się odnsił do tej lokalnej. Ale co zrobić jeśli jednak chciałbyś mieć możliwość odnieść sie do tej zmiennej będącej składnikiem obiektu? Możesz wtedy jawnie napisać this->a czyli "daj mi zmienną 'a' będącą składnikiem tego obiektu.

1
pjotr napisał(a)

...ale równie dobrze można by skorzystać z wcześniej utworzonej zmiennej a:

void Set_a(a)

Nie nie można by - to się nie skompiluje.

Wskaźnik this jest niejawnie przekazywany do funkcji i informuje ją na jakim obiekcie pracuje. Sama definicja funkcji siedzi tylko w definicji klasy, nie jest dokładana do każdego obiektu tej klasy.

0

Aha, już wszystko rozumiem, dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1