Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Всем привет! Читаю такое и не понимаю, что имеется ввиду: авторВ прошлом уроке мы выяснили, что любой метод класса самостоятельно определяет, для какого объекта он был вызван и "видит" другие члены класса без передачи их в качестве параметров. Зададимся вопросом: как это происходит?! Ответ на этот вопрос не является секретом. Дело в том, что когда функция, принадлежащая классу, вызывается для обработки данных конкретного объекта, этой функции автоматически и неявно передается указатель на тот объект, для которого функция вызвана. Этот указатель имеет фиксированное имя this и незаметно для программиста определен в каждой функции класса. Буду очень благодарен за расширенный комментарий! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 14:20 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, Когда компилятор переводит исходный код в машинный код, он неявно увеличивает на 1 число параметров для методов класса, добавляя в список параметров указатель на вызывающий объект. Далее обращение к данным класса выполняется с помощью этого указателя. Средства языка скрывают эти детали, но при необходимости можно явно использовать указатель на вызывающий класс при помощи ключевого слова this, т.е. для класса Код: plaintext 1. 2. 3. 4. 5. 6. эти определения метода getA эквиваленты 1) Код: plaintext 1. 2. 3. 4. и 2) Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 15:28 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Более того, после компиляции это в любом случае выглядит так: Код: sql 1. 2. 3. 4. С виртуальными методами чуть сложнее, но принцип тот же: вызывается обычная процедура с одним дополнительным параметром. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 15:39 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Nagdiel , Dimitry Sibiryakov Спасибо за объяснение, вроде понятно. Теперь еще вопросик маленький появился. Nagdiel описал метод за пределами класса, это нормальная практика так делать? В каких случаях так нужно делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 17:39 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
MaximuS_GNagdiel описал метод за пределами класса Где??? Ты случайно не путаешь описание с реализацией?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 17:43 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, Да самая что ни есть обычная практика, обычно в h-файле пишут только объявление (суть интерфейс класса), реализацию выносят в cpp-файл. Прямо в интерфейсе описывают реализацию только в случае очень коротких методов, ну или что-то типа инициализации полей класса в конструкторе. Подумайте сами, если у вас метод getA() - не одна строчка, а несколько десятков, и такой метод не один - то насколько трудно будет понять что делает данный класс? Более того, даже если речь не о классах, а просто об отдельных функциях подход остается примерно таким же. В h-файле дают только объявление, а реализацию все равно в cpp-файле. В Delpi/pascal есть аналогичная штука - модуль разделяется на секцию interface и implementation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 17:51 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMaximuS_GNagdiel описал метод за пределами класса Где??? Ты случайно не путаешь описание с реализацией?.. Да, спутал с реализаций) NagdielДа самая что ни есть обычная практика, обычно в h-файле пишут только объявление (суть интерфейс класса), реализацию выносят в cpp-файл. Прямо в интерфейсе описывают реализацию только в случае очень коротких методов, ну или что-то типа инициализации полей класса в конструкторе. Подумайте сами, если у вас метод getA() - не одна строчка, а несколько десятков, и такой метод не один - то насколько трудно будет понять что делает данный класс? Более того, даже если речь не о классах, а просто об отдельных функциях подход остается примерно таким же. В h-файле дают только объявление, а реализацию все равно в cpp-файле. В Delpi/pascal есть аналогичная штука - модуль разделяется на секцию interface и implementation. Ясно, спасибо большое! :) Всем удачи!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 17:55 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
MaximuS_GДа, спутал с реализаций) Тогда тут необходимо понимать что такое inline-функции. Если реализацию написать прямо в заголовке, а потом включить этот заголовок в 100500 модулей, то в результирующем экзешнике будут 100500 копий этого кода. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 21:01 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMaximuS_GДа, спутал с реализаций) Тогда тут необходимо понимать что такое inline-функции. Если реализацию написать прямо в заголовке, а потом включить этот заголовок в 100500 модулей, то в результирующем экзешнике будут 100500 копий этого кода. Спасибо за комментарий! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 21:08 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Nagdielто насколько трудно будет понять что делает данный класс? Ну как-то же с этим в java и c# справляются... Наверное с помощью того, что редактор автоматом сворачивает весь код )) В настоящее время вынос реализации в отдельное место должен преследовать иные цели. Удобства при чтении это никак не добавляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 21:13 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Edd.DragonВ настоящее время вынос реализации в отдельное место должен преследовать иные цели. Удобства при чтении это никак не добавляет. Почему только в настоящее время? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 21:38 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
ИзопропилПочему только в настоящее время? Потому что, раньше приходилось читать код в текстовом режиме на 25 строк по вертикали без особых фнукциональных удобств редакторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2013, 22:25 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Edd.DragonПотому что, раньше приходилось читать код в текстовом режиме на 25 строк по вертикали без особых фнукциональных удобств редакторов.П-ф-ф ... MultiEdit дохрена чего умел и встроенные редакторы Borland-овских сред, да и режим 132x50 - вчера появился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 08:06 |
|
||
|
указатель this
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovEdd.DragonПотому что, раньше приходилось читать код в текстовом режиме на 25 строк по вертикали без особых фнукциональных удобств редакторов.П-ф-ф ... MultiEdit дохрена чего умел и встроенные редакторы Borland-овских сред, да и режим 132x50 - вчера появился.Тише, не рушь легенды. Пусть верят что мы через copy con file.c программы писали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 08:40 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2020541]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
13ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 552ms |

| 0 / 0 |
