![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
zss |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
есть классы (могут быть ошибки - писал здесь, но думаю смысл понятен)
но я не могу использовать оператор
почему ? ведь оператор определен
|
||||||
|
|||||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
В таких случаях, для операторов-мемберов, никогда не происходят преобразования. Если у Items нет подходящего оператора=, то просто выдается ошибка. Преобразование произошло бы, если бы мог существовать глобальный оператор Item& operator=(Item& lhs, int rhs){...}. ![]() --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
zss |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
в самом деле это я привел только пример. На самом деле методов больше и их не получиться реализовать через опереторы. Более того не хотелось бы плодить один и тот же код.
этого тоже не очень хочется делать Может есть способ проще - что-нибудь с proxy-классами. Или как еще заставить неявно преобразовать типы ![]() |
||||
|
|||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
в C++ нет перегрузки operator.() Добавлено @ 16:29
попробуй через operator->()
но тогда станут доступны через operator->() все public методы Item-а -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Это сообщение отредактировал(а) MAKCim - 6.6.2006, 16:50 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
MAKCim, мне кажется, первый вариант лучше (только там никто не заставлет указатель хранить, можно и прямо объект). Применение прокси вроде ничем не оправд
ано.
Так этого zss и добивается - получить доступ к открытым членам Item. Есть еще вариант с оператором () (если указательная семантика не нравится).
-------------------- ... |
||||
|
|||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
можно ![]()
![]() кроме того есть возможность ограничить использование некоторых методов Item-а (хотя может это и не нужно) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Против таких программистов вообще защиты нет. Только убивать в младенчестве. ![]() Это я к тому, что дизайн должен скорее явно декларировать намерения автора, чем защищать от злонамеренного дурака. -------------------- ... |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Это да просто в принципе такое можно сделать -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
zss |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
что-то не очень помагает
если быть точным, то весь код примерно такой
и тогда
|
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Опять на те же грабли наступаешь... Оператор преобразования типа здесь не поможет... И вообще, не стоит им злоупотреблять: в данном контексте его применение неоправданно.
Короче, прямо по Items (без скобок (), -> или функции get(), как в примере MAKCima, получить доступ к элементам Item не получится. Потому что компилятор не будет применять преобразование типа к левому операнду "[]",".", etc. -------------------- ... |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
а это интуитивно понятно что-ли?
непонятно что за size() есть у Items
если Items непременно должен себя вести как Item может использовать наследование? или это логически/семантически/... не верно будет? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Скорее всего это ты что-то не так понял: или наследование, или переопределение необходимых операторов\функций делегированием ([], size(), etc). -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |