HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: c++, указатели, ключевое слово this</p>
1 <p>Теги: c++, указатели, ключевое слово this</p>
2 <p>Ключевое слово<strong>this</strong>в языке программирования C++ представляет указатель на текущий объект данного класса. Таким образом, через<strong>this</strong>мы сможем обратиться внутри класса к любым членам этого класса.</p>
2 <p>Ключевое слово<strong>this</strong>в языке программирования C++ представляет указатель на текущий объект данного класса. Таким образом, через<strong>this</strong>мы сможем обратиться внутри класса к любым членам этого класса.</p>
3 <p>В нашем примере определен класс<strong>Point</strong>, представляющий точку на плоскости. Для того чтобы хранить координаты этой точки, в классе определены переменные<em>x</em>и<em>y</em>.</p>
3 <p>В нашем примере определен класс<strong>Point</strong>, представляющий точку на плоскости. Для того чтобы хранить координаты этой точки, в классе определены переменные<em>x</em>и<em>y</em>.</p>
4 <p>Так вот, чтобы обращаться к этим переменным, применяется указатель<strong>this</strong>. При этом после this надо ставить не точку, а стрелку -&gt;.</p>
4 <p>Так вот, чтобы обращаться к этим переменным, применяется указатель<strong>this</strong>. При этом после this надо ставить не точку, а стрелку -&gt;.</p>
5 <p>Однако в большинстве ситуаций вам вряд ли понадобится ключевое слово<strong>this</strong>для обращения к членам класса. Зато<strong>this</strong>может быть необходим в том случае, когда параметры функции либо переменные, определяемые внутри функции, называются точно так же, как и переменные класса. Допустим,<strong>this</strong>применяют, чтобы разграничить параметры и переменные класса в конструкторе.</p>
5 <p>Однако в большинстве ситуаций вам вряд ли понадобится ключевое слово<strong>this</strong>для обращения к членам класса. Зато<strong>this</strong>может быть необходим в том случае, когда параметры функции либо переменные, определяемые внутри функции, называются точно так же, как и переменные класса. Допустим,<strong>this</strong>применяют, чтобы разграничить параметры и переменные класса в конструкторе.</p>
6 <p>Кроме того, используя<strong>this</strong>, вы сможете возвращать текущий объект класса:</p>
6 <p>Кроме того, используя<strong>this</strong>, вы сможете возвращать текущий объект класса:</p>
7 <p>В примере выше метод<strong>move</strong>возвращает посредством<strong>this</strong>ссылку на объект текущего класса, выполняя условное перемещение точки. В результате появляется возможность осуществлять вызов метода<strong>move</strong>по цепочке для одного и того же объекта:</p>
7 <p>В примере выше метод<strong>move</strong>возвращает посредством<strong>this</strong>ссылку на объект текущего класса, выполняя условное перемещение точки. В результате появляется возможность осуществлять вызов метода<strong>move</strong>по цепочке для одного и того же объекта:</p>
8 <p>Тут следует отметить, что возвращается не просто объект<strong>Point</strong>, а ссылка на этот объект. То есть строка, определенная выше, по сути, будет аналогично следующему коду:</p>
8 <p>Тут следует отметить, что возвращается не просто объект<strong>Point</strong>, а ссылка на этот объект. То есть строка, определенная выше, по сути, будет аналогично следующему коду:</p>
9 <p>Но что было бы, если бы метод<strong>move</strong>возвращал не ссылку, а просто объект?</p>
9 <p>Но что было бы, если бы метод<strong>move</strong>возвращал не ссылку, а просто объект?</p>
10 <p>В таком случае вызов p1.move(10, 5).move(10) был бы по факту эквивалентен коду ниже:</p>
10 <p>В таком случае вызов p1.move(10, 5).move(10) был бы по факту эквивалентен коду ниже:</p>
11 <p>То есть второй вызов метода move вызывался бы в целях создания временной копии, следовательно, он бы никак не затрагивал переменную<em>p1</em>.</p>
11 <p>То есть второй вызов метода move вызывался бы в целях создания временной копии, следовательно, он бы никак не затрагивал переменную<em>p1</em>.</p>
12 <p><em>По материалам https://metanit.com/cpp/.</em></p>
12 <p><em>По материалам https://metanit.com/cpp/.</em></p>
13  
13