![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Добрый день.
Тут недавно задался вопросом: В чем отличие таких объявлений функций
от
|
||||
|
|||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Первый вариант означает, что функция возвращает константное значение.
Второй вариант применим только для методов класса и означает, что при вызове данного метода состояние объекта не изменяется, т.е в этом методе не допустимы операции по модификации членов класса. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
спасибо
|
|||
|
||||
| Ni@m |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 11.3.2004 Где: почти Киев Репутация: 0 Всего: 6 |
Еще немного о втором - если это метод класса, и обьект класса инициализирован константным, то этод метод можно будет вызвать, а если он определен не как константный, то не получится
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше. |
|||
|
||||
| np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
те получается, что первое гарантирует на уровне компилятора, что если мы опр. интерфейсную функцию, тогда, даже если мы передаем указатель на свойство объекта, то пользователь ничего не изменит...
получается для определения интерфейса, лучше использовать 1 - ый вариант.... Это сообщение отредактировал(а) arajan - 14.3.2005, 17:39 |
|||
|
||||
| Ni@m |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 11.3.2004 Где: почти Киев Репутация: 0 Всего: 6 |
Нет, первое просто возвращает константу. Вторая же обещает нам, что ничего в обьекте не изменится!
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше. |
|||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Что за чепуха. Причем тут лучше. Это два объявления, означающих совершенно несвязанные вещи
-------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Значит эти вещи ваще не связаны.... ок. ну чепуха чепуха, с кем не бывает.... без идиотов не было бы УМНЫХ.
а по поводу интерфейса, без __property не обойтись.... наверное.... |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Словечко __property это из C++ Builder и к const'ам не имеет отношения вообще А что ты называешь интерфейсом? -------------------- Да. Именно так. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
C константностью, кстати, вещь такая - надо либо ее использовать с последовательной фанатичностью (что предпочтительнее), либо не использовать вообще. Иначе будут возникать проблемы из-за несовместимости константных и неконстаных членов.
-------------------- Волны гасят ветер... |
|||
|
||||
| np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
набор public методов для работы с объектом, и тут совершенно не хочеться чтоб клиет хоть как мог менять содержимое объекта. только наборами специальных методов.... Опять, если хочеться посмотреть своиство объекта, то можно опрелелить интерфейсный метод get* ();... но если он может позволить что то менять в нутри объекта, на мой взгляд это плохо.... (как в случае ситуации которую описал Vyacheslav )....
Я это понимаю. Но эта возможность предоставленная компиляторов bcb для организации интерфейсов, очень даже не плохая... Это сообщение отредактировал(а) arajan - 15.3.2005, 11:39 |
||||
|
|||||
| Дрон |
|
||||||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
arajan
То что ты называешь интерфейсом, обычно называется свойствами (по английски properties)
Не совсем понимаю логику. Ты же сам пишешь программу и знаешь, что и где будет меняться На мой взгляд делать метод чтения константным совсем не обязательно. Например у меня часто используется что-то вроде:
Который естественно меняет состояние объекта, инициализируя поле m_value. Что же касается константных методов, то можешь ими пользоваться без проблем:
Добавлено @ 15:47 Но в то же время, если ты используешь __property (и уверен, что находишься в здравом уме
Теперь, ты не можешь извне менять значение Value, но можешь его читать, т.е:
Это сообщение отредактировал(а) Дрон - 15.3.2005, 15:47 -------------------- Да. Именно так. |
||||||||||
|
|||||||||||
| np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Дрон
МЕТОДОВ!!!!!!!!!!! Ты видел? и вообще, где ты видел что я отождествлял __property и const.... помоему это бред.... Ладно, все пост себя давно изжил... Про __property не стоило столько писать, тк у всех владельцев bcb есть справка.... там полубому лучше написано, производитель все таки... Всем спасибо за ответы! Это сообщение отредактировал(а) arajan - 15.3.2005, 17:42 |
||||
|
|||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
arajan
Ок, умолкаю Просто язык твой сложно понимать мне. -------------------- Да. Именно так. |
|||
|
||||
| np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Дрон, да без обид... не ну реально можно справку читать, че ты в самом деле....
А с языком это правда проблема, мне многие говорят, но я пытаюсь с этим бороться.... |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Хочу сказать, что с точки зрения дизайна это все-таки не очень хорошо, не смотря на то, что так удобнее. С такими методами объект нельзя будет делать константным там где по логике он мог бы быть константным. -------------------- Волны гасят ветер... |
|||
|
||||
| np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
дать только то что нужно и ничего больше... это красиво, но полюбому можно этим и не пользовться... это вопрос эстетики... А она мне нравиться!!!!!
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |