Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
22 / 22 / 4
Регистрация: 15.04.2009
Сообщений: 100

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

12.07.2010, 21:24. Показов 4049. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заранее извиняюсь за ужасное название темы, но ничего другого придумать не смог.
У меня есть свой класс(пусть зовется 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'е про это ни слова...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.07.2010, 21:24
Ответы с готовыми решениями:

Как определить тип возвращаемого значения шаблонной функции по типу итератора (не auto)?
Здравствуйте. Есть шаблонная функция (например, суммирования). Входные значения два итератора -- начало конец. template...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
#include <iostream> #include <cmath> using namespace std; int main() { int N; double Y = 0; setlocale(0,""); cout <<...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
#include "pch.h" #include <iostream> #include <conio.h> #include <string> #include <fstream> #include <iomanip> #include...

22
13.07.2010, 23:07
Студворк — интернет-сервис помощи студентам

Не по теме:

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

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

0
22 / 22 / 4
Регистрация: 15.04.2009
Сообщений: 100
14.07.2010, 11:45  [ТС]
Возник еще вопрос, на этот раз не по теме:
Есть массив переменных типа short, а первый(нулевой) его член надо сделать типа long... Сделать их раздельно не представляется возможным - иначе придется вносить значительные изменения в алгоритмы...
0
14.07.2010, 12:03

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2010, 12:03

Выражение должно относиться к целочисленному типу или типу перечислений без области видимости
#include "stdafx.h" #include <iostream> using namespace std; class lVector { int Vector1; int Vector2; public: ...

Выражение должно относиться к целочисленному типу или типу перечисления без области видимости
Добрый день,столкнулся с проблемой "Выражение должно относиться к целочисленному типу или типу перечисления без области видимости" в...

2IntelliSense: выражение должно относиться к целочисленному типу или типу перечисления без области видимости
"Выражение должно относиться к целочисленному типу или типу перечисления без области видимости" Что это за ошибка такая и как ее...

что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу)
1) что происходит со старым конструктором когда я создаю новый, пренадлежащий производному классу? (первый конструктор пренадлежит базовому...

Как определить расширение по mime-типу?
Вопрос вообще из заголовка понятен. Вот беру mimetypes: import magic # в path путь до файла mtype = magic.from_file(path,True) ...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской) Options Preferences General Language
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru