Интересные особенности указателя this
При работе с классами в C++ мы иногда встречаемся с ключевым словом this. В этой статье я расскажу о некоторых особенностях указателя this.
4К открытий4К показов
При работе с классами в C++ мы иногда встречаемся с ключевым словом this
. Его можно встретить в методах экземпляра класса. Это ключевое слово не так часто используют, и о нём можно найти мало информации. Тем не менее у this
есть интересные особенности и случаи применения, о которых знают не все разработчики C++. В этой статье я расскажу о некоторых интересных особенностях указателя this
.
Определение this
Начнём с определения. this
— это указатель на объект, из которого мы вызываем метод. С помощью указателя this и оператора ->
можно обратиться к полям класса. Например так:
В большинстве случаев мы можем опустить часть this->
и написать просто x
.
Теперь рассмотрим некоторые случаи, в которых может быть полезным использование this
.
Различие локальной переменной и поля класса с одинаковым именем
Указатель this
может быть полезен в случае, когда локальная переменная в методе имеет то же самое имя, что и поле объекта:
Здесь в методе set
мы присваиваем полю класса x
значение локальной переменной this
. Чтобы различить поле класса x
и локальную переменную с тем же именем мы используем запись this->x
при обращении к полю класса.
this является const указателем
Указатель this
является const
указателем, то есть неизменяемым. Проверим это на примере:
Здесь в методе change
мы пытаемся присвоить указателю this
новое значение.
Попробуем вызвать метод change
в методе main
:
Если мы запустим код, то получим ошибку компиляции в методе change
(lvalue required as left operand of assignment). Компилятор не позволяет нам изменить значение указателя this
.
Указатель this доступен только внутри нестатических методов класса
Попробуем добавить такой метод в наш класс:
Здесь мы добавили для метода set
модификатор static
.
Теперь вызовем это:
Мы получим ошибку компиляции ‘this’ is unavailable for static member functions
.
Это объясняется тем, что указатель this
передаётся только в нестатические методы класса как скрытый параметр. В статических методах он недоступен.
this удобно использовать для цепочных вызовов
Мы можем вернуть ссылку на объект, на котором мы вызываем метод класса:
Здесь метод set
возвращает ссылку на объект класса Foo
(Foo&
).
Такая реализация метода позволяем нам писать код, подобный этому:
Здесь мы вызываем метод set
со значением 2, а затем ещё раз со значением 8. Это возможно, поскольку первый вызов метода set
возвращает указатель на объект obj
. Второй метод вызывается на объекте obj
. Можно переписать код так:
Таким образом, мы познакомились с указателем this
и узнали о некоторых интересных особенностях при работе с ним.
4К открытий4К показов