Ключевое слово this
Ключевое слово this представляет собой указатель на объект,
для которого был вызван нестатический метод класса. Внутри метода
this позволяет получить доступ к полям и методам текущего
объекта, а также вернуть ссылку на сам объект. Ключевое слово
this недоступно в статических методах, так как они не
привязаны к конкретному экземпляру класса.
Тип указателя this внутри нестатического метода класса
MyClass - это MyClass*. Если метод объявлен
как const, то тип будет const MyClass*, и через
такой указатель нельзя изменять поля объекта.
Синтаксис
this
this->member
(*this).member
return *this;
Пример
Давайте создадим класс Point с полями x и
y. В конструкторе имена параметров совпадают с именами
полей, поэтому для доступа к полям объекта используем this:
#include <iostream>
using namespace std;
class Point
{
public:
int x;
int y;
Point(int x, int y)
{
this->x = x;
this->y = y;
}
void print()
{
cout << this->x << " " << this->y << endl;
}
};
int main()
{
Point p(1, 2);
p.print();
return 0;
}
Результат выполнения кода:
1 2
Пример
Давайте вернём ссылку на текущий объект с помощью
*this, чтобы реализовать цепочку вызовов методов:
#include <iostream>
using namespace std;
class Counter
{
private:
int count;
public:
Counter() : count(0) {}
Counter& increment()
{
this->count++;
return *this;
}
Counter& add(int n)
{
this->count += n;
return *this;
}
void print()
{
cout << this->count << endl;
}
};
int main()
{
Counter c;
c.increment().add(5).increment();
c.print();
return 0;
}
Результат выполнения кода:
7
Пример
Давайте используем this для проверки, что метод
вызван именно для текущего объекта, и для сравнения адресов:
#include <iostream>
using namespace std;
class Box
{
public:
int value;
Box(int value) : value(value) {}
bool isSame(const Box& other)
{
return this == &other;
}
void printAddress()
{
cout << this << endl;
}
};
int main()
{
Box a(1);
Box b(2);
cout << a.isSame(a) << endl;
cout << a.isSame(b) << endl;
return 0;
}
Результат выполнения кода:
1
0
Смотрите также
-
ключевое слово
constructor,
который инициализирует объект класса -
ключевое слово
operator,
который позволяет перегружать операторы -
ключевое слово
decl,
которое объявляет класс -
ключевое слово
mutable,
которое разрешает изменять поле в const-методе