![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| murzzzzz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 13.2.2005 Где: Киев Репутация: 1 Всего: 1 |
чо это вообще за указатель такой this? им кто-нить юзает? тогда с какой целью?
|
|||
|
||||
| setq |
|
||||||||||||||
|
Unregistered |
а вообще, не обижайся, советую почитать чего-нибудь. в с++ много интересного %) Это сообщение отредактировал(а) setq - 14.2.2005, 12:36 |
||||||||||||||
|
|||||||||||||||
| murzzzzz |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 13.2.2005 Где: Киев Репутация: 1 Всего: 1 |
читала ,токо в книге в книге как в Библии, сильно замысловато:)), поэтому и спрашую.
а почему в коде
када Вы функцию определяли, не написали какого она типа? или када используется
не надо тип? это ж типа ссылка? |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
это и есть тип
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| murzzzzz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 13.2.2005 Где: Киев Репутация: 1 Всего: 1 |
ага!!!!! поняла!!!
токо этот this мне все равно не нравится |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
не знаю, как this*, но сам this - конечно очень нужен.
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
самый простой и понятный пример:
у тебя членом класса является поле id и в конструктор тебе передается переменная с именем id вот чтобы полю класса присвоить переданную переменную пишут this->id = id; -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Wowa |
|
|||
|
Эксперт Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
а когда все-таки нужен this* ?
Это ведь не обыкновенный указатель, а тут ключевое словое this используется, которой символизирует сам класс. Или это также действует? пример?
Добавлено @ 18:27 _hunter можешь исправить ошибки в моем коде? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
примерно так ( не вводя доп. операторов ( и если правильно понял идею ) ):
а *this нужен для сцепки ( как уже было показанно выше ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
Указатель this очень часто используется для перегрузки операторов,
а именно там где нужна конкатенация. Например оператор +. -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Еще вот, такое использование this:
|
||||
|
|||||
| Adil' |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
З.Ы. Без проверки твой пример все равно будет работать
-------------------- Удачи |
||||||||
|
|||||||||
| Да гость я... |
|
||||
|
Unregistered |
Э-э-эх ребя...
Хрен бы кто из вас у меня техническое интервью прошел. Попросил бы вас написать оператор присваивания для к-нибудь простенького класса. Как вы его без this нарисуете?
Зачем в опреаторе присвоения this спросите? Да чтобы объект сам в себя не копировать. А зачем перегруженные операторы часто *this возвращают? Чтобы выражения с объектами можно было записывать в таком же виде, как и со встроенными типами. Например,
Ну, и наконец, signature любой ф-ции члена класса содержит this первым аргументом. Это единственный способ сообщить ей данные какого объекта она в настоящий момент должна обработать. Точка входа-то в код ф-ции-член класса одна, а объектов - куча. А иначе каким таким образом ф-ция знает, для данных какого объекта её вызвали? Без понимания этого обстоятельства у людей объектный код ф-ций-членов размножаться начинает... |
||||
|
|||||
| Да гость я... |
|
|||
|
Unregistered |
Сорри, неточность в формулировке: любой НЕСТАТИЧЕСКОЙ ф-ции члена класса. Статические методы this не получают. Именно поэтому они в состоянии доступиться только до статических же атрибутов. Ну покедова... |
|||
|
||||
| Adil' |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Тоже мне, самый умный... -------------------- Удачи |
||||
|
|||||
| comcon1 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Поднимаю тему.
Я передаю функции указатель this (на класс Interface, содержащий контайнер hyperarray типа WVector). Так:
Внутри функции пытаюсь получить значение итератора (на самом деле там еще углубление в несколько функций, но везде передается указатель).
Вылетает SEGMENTATION FAULT. Делаю так. Все работает:
Что за шаманизм?? Подробно дать код не могу -- большой. Я не выцплю нужного наглядного места. Но вот мой вопрос. Какими особыми свойствами обладает этот указатель this, что так происходит??? |
||||||
|
|||||||
| CoreDumped |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.8.2005 Репутация: нет Всего: 1 |
Может быть глюки компилятора
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Хм...
А почему у функции data_strings не описано возвращаемое значение? Еще в первом варианте аргумент "Interface *at", а во втором "Interface *&at". Это описка или действительно есть такая разница... и кто такой int__. Непонятно, зачем Interface* передается в data_strings, если вроде не используется. Еще имя "интерфейс" наводит на интересные размышления. У тебя там точно никто ссылки не считает? В общем, недостаточно данных. this никакими особым свойствами не обладает, кроме того, что он const (в смысле, нельзя написать this = xxx). Ничего такого в приведенном коде нет - значит, собака зарыта в том коде, который ты скрыл... На глюки компилятора кивать нечего, это маловероятно - надо разбираться, нельзя такие мины за спиной оставлять. -------------------- ... |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Сорри, он используется.
Копаться в кодах, через которые проходит мой указатель интерфей -- анреал. Дело в том, что я пересоздаю определенный шаблонный класс в иерархии boost::spirit, дабы написать свой актор. Написанный мною актор-класс, наследуется boost-овским классом, потом этот класс передает мой указатель еще кому-то.. в общем мой указатель путешествует в качестве параметра еще по всему boost-овскому заголовку. (Все таки создатели boost-a извращенцы, потому что актор по другому написать нельзя -- я делал по аналогии с примером.) Глядя на то, что там во всех шаблонах в загаловках передается ссылка, я поставил ссылку в самом начале (это, разумеется не описка) и заработало. Вопросы к boost-у. Мой указатель -- является параметром буустовских шаблонов. А там -- везде передаются ссылки. Я думаю -- в этом дело. |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Вот так, наверное:
this константный -- а значит неконстантную ссылку на него сделать нельзя. Он передавался как параметр и где-то бууст его воспринял не так как надо. И до меня дошел не указатель, а черт знает что (указателессылка наверное |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ага, т.е. строка
в начале твоего работающего кода непричем? Уже легче! Тогда ты, видимо, прав. Бывают, к сожалению, такие проблемы с шаблонами - неправильно тип где-нибудь укажешь, и такие чудеса начинаются! В лучшем случае - компилятор трехэтажно ругается, в худшем - падает, как у тебя. Boost тут в общем-то не причем - это работа с шаблонами пока реализована не так хорошо как хотелось бы. Ничего, со временем привыкнешь, и заранее будешь знать, где мины лежат... Почему там ссылка у буста - наверняка есть причина. А вообще не напрасно ли ты указатель используешь? Может, лучше просто сам класс - если там и так все по ссылке передается. Как-то использование указателей не очень в духе буста. -------------------- ... |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Действительно не в духе, это у меня. На самом деле там не так все страшно.
Просто я не привык еще. А компиляторы действительно с шаблонами чудеса творят. И диагностика совершенно нечитабельна - хорошо если строчку укажут, где ошибка. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ну, я считаю, что у VC 7.1 с диагностикой вполне неплохо (а по сравнению с 6, так и вообще волшебно). Читать тяжеловато, но это из-за длинных имен. Я, когда сразу не понимаю, чего на меня ругаются, копирую сообщение в нотепад и сокращаю имена - выкидываю пространства имен, параметры шаблонов и т.д., потому что контекст обычно очевиден. И сообщение приводится к чему-нибудь типа "не могу не консту присвоить конст"... Слава богу, это редко бывает нужно.
Сорри за оффтопик. -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |