![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Уточняю: плохо не вообще выносить такие определения в заголовочные файлы, а отделать их от интерфейса класса. Другими словами, если A - библиотечный класс (в файле, который ты не должен менять), а ты определяешь для него какой-нибудь глобальный оператор, для определенности ==, в другом заголовочном файле, ты создаешь возможность разного сравнения объектов A в разных модулях. Т.е. все начинает зависеть от того, включена ли твоя версия оператора или нет. Если учесть, что h-файлы имеют тенденцию вкладываться друг в друга, то в один прекрасный момент может случиться так, что добавление еще одного include с какой-нибудь нужной функциональностью, приведет к изменению сравнения объектов A. Причем сразу это можно и не заметить.
Избежать эту ситуацию можно только если последовательно придерживаться принципа: весь интерфейс объекта должен быть определен там же, где и сам объект. Нужно тебе локально изменить сравнение объектов A - заверни их в класс B и реализуй новые операторы для него. Это относится ко всем общеупотребимым операторам: +, <, etc. -------------------- ... |
|||
|
||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Уже вижу, чем :-) С переопределением оператора != под конкретный класс (при необходимости) возникают проблемы (операторы-друзья вообще идут лесом, независимо от константности ссылок T&). Хотя в чём может заключаться эта необходимость?
Применительно к моему примеру (!= и == можно поменять местами) функциональность вряд ли будет изменена. |
||||
|
|||||
DeadSoul |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
UnrealMan, тем, что ты научишься сравниваит и мои классы тоже.
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
так неинтересно ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
DeadSoul |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
После включения h-файла c твоим шаблоном operator!= будет определен для ВСЕХ классов содержащих operator!=. А ты не думаешь, что я специально не создавал оператор!=?! -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Это ещё зачем специально его не создавать? Добавлено @ 12:37 Ты, должно быть, хотел сказать "содержащих operator=="? |
|||
|
||||
DeadSoul |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Затем же зачем конструкторы делают explicit. Чтобы компилятор сообщал мне об ошибках
Ну да -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
||||
|
|||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Т.е. оператор== создали, а != запретили. Не пойму, в чём прикол. Смысл такого запрета? Операторы не запрещают для того, чтобы компилятор выдавал ошибку (ошибка – это следствие запрета, а не причина :-) ).
|
|||
|
||||
DeadSoul |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
В том, что мне НЕ нужен оператор != -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Где-то слышал (по крайней мере про operator= ), что запретили его глобальный аналог, потому что в этом случае возможны любые преобразования над объектом по правую сторону от него, что не очень интуитивно. --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
DeadSoul |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Зачем, что бы при попытке использования данного оператора(который я не писал) я получил ошибку компилятора, а не непонятные глюки -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Зачем тебе эта ошибка? Раз ты пытаешься использовать этот оператор, значит, он тебе уже нужен. Причём нужен именно в значении отрицания == (в противном случае это какой-то очень странный стиль программирования получается). Какие здесь могут быть глюки? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |