Указатель this С++

Указатель this С++
4.3 (86.67%) 3 votes





указатель this в c++, this c++, this с++

В этом уроке мы достаточно поверхностно рассмотрим указатель this, чтобы начинающие программисты познакомились с ним и имели представление о том где он встречается и как работает. Хочу, для начала, рассмотреть пару несложных примеров. В первом будут определены функции: одна из которых будет записывать данные в переменные, а вторая — отображать их на экран. Во втором примере определим класс, который будет содержать два метода, выполняющих такую же работу, как и функции из первого примера.

Когда будете рассматривать эти примеры, обратите внимание на то, как функции из первого примера и методы класса из второго примера, будут принимать параметры.

В этом примере вы, скорей всего, не увидели ничего нового и сложного для вас. Все просто — функции лишь принимают параметры и выполняют определённые действия с этими параметрами. Теперь напишем простой класс, в котором реализуем методы очень похожие на функции из первого примера. Но кое-чем они будут отличаться. А именно тем, что им не надо принимать в виде параметров, члены класса, чтобы внести изменения в них.

Рассмотрев этот пример, вы увидели, что определяя методы в теле класса, мы не прописываем параметры в сигнатуре. И вызывая эти методы из главной функции, мы так же не указываем с какими данными им работать. Но каким-то образом данные вносятся именно в те члены класса, которые указаны в теле методов. Как же методы «понимают», с какими данными и с каким объектом класса им надо работать? Дело в том, что в методы класса, неявно передается в виде параметра указатель this (указатель на объект класса). Происходит это автоматически. Мы этого не видим, так как этот указатель — есть скрытый первый параметр любого метода класса.

Указатель this хранит адрес определённого объекта класса. В рассмотренном примере он хранит адрес объекта objectOfClass. Таким образом он неявно указывает методам класса с данными какого объекта надо работать.




Отмечу, что у программистов все же есть возможность применять указатель this явно. Если бы мы определяли метод enterData() с явным использованием this, это выглядело бы так:

указатель this в c++, this c++, this с++

Или так:

указатель this в c++, this c++, this с++

Конкретно в этих случаях можно обойтись и без явного использования this. Но иногда явного использования не избежать. К примеру в следующем примере, this не позволит компилятору запутаться в именах членов класса и параметров которые принимает конструктор.

В строке 10 мы определили конструктор с параметрами, имена которых совпадают с именами членов класса: someName и someAge. Далее чтобы дать компилятору понять что именно и куда надо скопировать, мы явно используем указатель this:

Это означает, что в член класса someAge необходимо записать значение, которое будет задано про создании объекта класса.

указатель this в c++, this c++, this с++

Подведем итог : Указатель this — это указатель, который хранит адрес конкретного объекта класса. Он присутствует в виде скрытого первого параметра в каждом методе класса (кроме статических методов). Типом этого указателя является имя класса. В методах класса, при необходимости, можно использовать this явно. Однако явно объявлять, инициализировать или изменять этот указатель, нет возможности.

Надеюсь боле-менее вы разобрались с этой темой. Если есть вопросы — пишите в комментариях.

Чтобы поддержать наш сайт — нажмите на копилку и выберите любой удобный способ.

Рассылка новых уроков по программированию:

Указатель this С++: 3 комментария

  1. И что же получается? Есть this, но можно и объявить свой указатель, и использовать вместо this?

    1. Объявить свой указатель вы можете, но только это будет полный дубликат this, поэтому никакого смысла делать этого нет.
      А вот без this никакого другого доступа к «этому объекту» не было бы.

Добавить комментарий

Код размещайте в тегах: <pre class="lang:c++ decode:true ">YOUR CODE</pre>