РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
694 of 815 menu

Ключевое слово 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-методе
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить