Форум программистов, компьютерный форум CyberForum.ru

Как определить конверсию к типу? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
12.07.2010, 21:24     Как определить конверсию к типу? #1
Заранее извиняюсь за ужасное название темы, но ничего другого придумать не смог.
У меня есть свой класс(пусть зовется MY), который реализует математические действия(умножение, деление, извлечение квадратного корня и т.д.) с большой точностью. Если сделать выполнить следующую строчку(вместо переменных написаны их типы и на месте * может быть любой другой оператор):
int=int*MY;
То компилятор выдаст ошибку C2677, что естественно.
На MSDN'е написано:
"To use the operator, you must overload it for the specified type or define a conversion to a type for which the operator is defined."
Меня интересует второе т.е. define a conversion to a type for which the operator is defined. Вопрос в том, как это сделать? На MSDN'е про это ни слова...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2010, 21:24     Как определить конверсию к типу?
Посмотрите здесь:

что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) C++
Как узнать расширение по типу MIME? C++
Вопросы по типу char C++
Алгоритм по типу экселевского vlookup. Посоветуйте, как скомпоновать 2 файлика C++
C++ Как в условии поставить проверку принадлежности к тому или иному типу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
13.07.2010, 23:07     Как определить конверсию к типу?
  #21

Не по теме:

Nick Alte, ладно, споры о стандарте оставим.

Цитата Сообщение от Nick Alte Посмотреть сообщение
Смысл оператора преобразования в том, что он порождает новое значение другого типа, никоим образом не изменяя старого.
Если рассматривать оператор преобразования в данном контексте, согласен, его стоит сделать констанным. Но операторы преобразования используются и в другой ситуации, а именно, для неявного предоставления доступа к внутреннему объекту. Различного рода умные указатели, обертки и т.п. используют операторы преобразования именно в этом контексте.
Цитата Сообщение от Nick Alte Посмотреть сообщение
то есть, то же самое, о чём я и говорил: константным делается всё, что возможно
Вот с этим не могу согласится . Константным нужно делать то, что нужно, а не, то что можно. Все зависит от контракта реализуемого объектом. Если в соответствии с контрактом принимаемый в качестве аргумента объект, не должен изменить своего состояния - мы должны это явно указать с помощью const. Также если при выполнении метода объект не должен изменить своего состояниям, мы опять же явно это указываем делая метод константным.
Ключевое слово const, по-моему мнению, в первую очередь должно быть атрибутом контракта, а не "защитой от дурака".

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
14.07.2010, 11:45  [ТС]     Как определить конверсию к типу? #22
Возник еще вопрос, на этот раз не по теме:
Есть массив переменных типа short, а первый(нулевой) его член надо сделать типа long... Сделать их раздельно не представляется возможным - иначе придется вносить значительные изменения в алгоритмы...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2010, 12:03     Как определить конверсию к типу?
Еще ссылки по теме:

C++ Как присвоить типу char значение string?
C++ как в c++ проверить пренадлежит ли переменная определенному типу?
C++ Выражение должно относиться к целочисленному типу или типу перечисления без области видимости

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
14.07.2010, 12:03     Как определить конверсию к типу?
  #23

Не по теме:

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Но операторы преобразования используются и в другой ситуации, а именно, для неявного предоставления доступа к внутреннему объекту.
И что с того? Как это нарушает следование рекомендации? Нам рекомендуют ставить const везде, где можно, а делать такой оператор доступа константным нельзя. Разумеется, термины "можно" и "нельзя" рассматриваются в контексте смысла операции - то есть, может ли операция изменять внутреннее состояние объекта. В рамках концепции обёртки она является владельцем объекта, к которому осуществляется доступ и изменение состояние объекта означает и изменение состояния обёртки (не физически, но по смыслу, в соответствии с замыслом обёртки).
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Ключевое слово const, по-моему мнению, в первую очередь должно быть атрибутом контракта, а не "защитой от дурака".
Так суть рекомендации как раз в том, чтобы стремиться выбирать константный контракт всегда, за исключением тех случаев, когда смысл операции заключается в изменении состояния объекта.

Yandex
Объявления
14.07.2010, 12:03     Как определить конверсию к типу?
Ответ Создать тему
Опции темы

Текущее время: 09:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru