Чтобы понять указатель «this», важно знать, как объекты смотрят на функции и члены-данные класса.
- Каждый объект получает свою собственную копию элемента данных.
- Все доступ к тому же определению функции, что и в сегменте кода.
Это означает, что каждый объект получает свою собственную копию членов данных, и все объекты совместно используют одну копию функций-членов.
Тогда теперь возникает вопрос: если существует только одна копия каждой функции-члена и она используется несколькими объектами, как осуществляется доступ к соответствующим элементам данных и их обновление?
Компилятор предоставляет неявный указатель вместе с именами функций как «this».
Указатель 'this' передается как скрытый аргумент всем вызовам нестатических функций-членов и доступен как локальная переменная в теле всех нестатических функций. Указатель 'this' недоступен в статических функциях-членах, так как статические функции-члены могут вызываться без какого-либо объекта (с именем класса).
Для класса X тип этого указателя — «X *». Кроме того, если функция-член X объявлена как const, тогда тип этого указателя будет 'const X *' (см. Этот GFact )
В ранней версии C ++ указатель 'this' можно было бы изменить; тем самым программист может изменить объект, с которым работает метод. Эта функция была в конечном итоге удалена, и теперь это в C ++ является r-значением.
C ++ позволяет объектам уничтожать себя, вызывая следующий код:
|
Как сказал Страуструп, «this» может быть ссылкой, а не указателем, но в ранней версии C ++ эта ссылка отсутствовала. Если «this» реализовано в качестве ссылки, вышеупомянутой проблемы можно избежать, и она может быть более безопасной, чем указатель.
Ниже приведены ситуации, в которых используется указатель this.
1) Когда имя локальной переменной совпадает с именем члена
|
Выход:
x = 20
Для конструкторов также можно использовать список инициализаторов, когда имя параметра совпадает с именем члена.
2) вернуть ссылку на вызывающий объект
|
Когда возвращается ссылка на локальный объект, возвращенная ссылка может использоваться для цепочки вызовов функций для одного объекта.
|
Выход:
x = 10 y = 20
Упражнение:
Прогнозировать выход следующих программ. Если есть ошибки компиляции, то исправьте их.
Вопрос 1
|
вопрос 2
|
Вопрос 3
|
Вопрос 4
|
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Двойной указатель (указатель на указатель) в C
- Что такое указатель на нулевой указатель
- Указатель на массив | Array Pointer
- C ++ | этот указатель | Вопрос 3
- C ++ | этот указатель | вопрос 2
- C ++ | этот указатель | Вопрос 1
- C ++ | этот указатель | Вопрос 4
- Пустой указатель на C
- Непрозрачный указатель
- пустой указатель в C / C ++
- AC / C ++ Pointer Puzzle
- C ++ | этот указатель | Вопрос 5
- Указатель против массива в C
- Тип указателя this в C ++
- Указатель на функцию в C
0.00 (0%) 0 votes