|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
|
Классы, комплексные числа, возможность записи comp(3+2.2i)29.08.2014, 03:34. Показов 2398. Ответов 23
Метки нет (Все метки)
Доброго времени суток! Для разминки мозгов решил написать класс больших комплексных чисел(мол число интерпретировать как строку, дабы получить очень большую длину) и к нему всякие перегрузки операций и т.д.(что бы сделать иллюзию стандартного типа). И "стандартизировать" захотелось очень сильно, по этому сразу пришла идея, чтобы была возможность такой записи:
my_class a; a = 5.1 + 2.4i; ( <=> a = 5.1 + 2.4*i; ) (число будет входить в множество C - комплексных чисел, по этому запись "a = 5.4;" не должна перестать работать) Я новичок в C++, по этому вопрос, возможно это сделать? По крайней мере было бы очень полезно хотя бы сделать такое: (number)i --> func(number) Можно будет извратиться и придумать. И мои знания говорят, что запись "my_class a = 5.1 + 2.4i;" невозможна в принципе, я прав? P.S. Вроде бы в C++14 есть такая чтука, как std::complex и такая запись(выше мною предложенная) вполне возможна, тогда вопрос, где найти реализацию, как это сделано?
0
|
|
| 29.08.2014, 03:34 | |
|
Ответы с готовыми решениями:
23
классы.комплексные числа
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 29.08.2014, 05:26 | |
|
1
|
|
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
|
| 29.08.2014, 14:06 [ТС] | |
|
Спасибо большое! Вечером попробую реализовать.
Вопрос о "my_class a = 5.1 + 2.4i;" остается открытым. Какой оператор нужно перегружать, чтобы такая запись была возможна?(или все таки никакой)
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||||||
| 29.08.2014, 15:52 | |||||||
0
|
|||||||
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
|
| 29.08.2014, 17:09 [ТС] | |
|
Нет, вы меня не поняли, какой оператор нужно перегрузить(если это возможно), чтобы при объявлении переменной класса сразу заполнить её даннымви через "равно". Как и с обычными типами данных, типа int,double, etc.
Пример давал выше "my_class a = 5.1 + 2.4i;"
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 29.08.2014, 18:08 | |
|
супер тупой, в данном случае выполняются operator""i, operator+ и конструктор копирования.
Добавлено через 4 минуты Опять же, все есть в доках: http://en.cppreference.com/w/c... ex/complex http://en.cppreference.com/w/c... tor_arith3
1
|
|
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
|
| 29.08.2014, 19:16 [ТС] | |
|
Все, понял проблему, извиняюсь за затуп
Просто раньше не сделал конструктор копирования и по этому такая запись давала ошибку, теперь все работает, спасибо!
0
|
|
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
|
| 01.09.2014, 01:05 [ТС] | |
|
Попытался реализовать и сразу возникла проблема(ожидаемая), компилятор дает ошибку:
my_class operator""i(int); // error: expected identifier before string constant constexpr my_class operator""i(int); // error: "constexpr" does not name a type Что я делаю не так?
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|||
| 01.09.2014, 01:18 | |||
|
Добавлено через 2 минуты
0
|
|||
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
||
| 01.09.2014, 01:19 [ТС] | ||
|
gray_fox,
все равно такие же ошибки выходят, пробовал и другие типы
0
|
||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 01.09.2014, 01:24 | |
|
Ничего не получается. То, что IDE дает подсказку не означает, что компилятор это поддерживает. Посмотрите, какая версия MinGW у Вас установлена. Большинство описанных в теме вещей относятся к C++14. constexpr к C++11. Для его работы нужно в опции компиляции добавить -std=c++11.
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||
| 01.09.2014, 01:26 | ||
|
0
|
||
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
||
| 01.09.2014, 01:36 [ТС] | ||
|
В опциях компилятора указал "-std=c++11" и поставил последний код блокс(ищу версию g++), итог: "error: constexpr does not name a type"
Правда теперь новая ошибка: error: 'my_class& my_class::operator"" i(long long unsigned int)' must be a non-member function Добавлено через 57 секунд Если я не ошибаюсь, то " gcc-c++ (gcc-4.8.1-tdm-1-c++) "
0
|
||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|||||||||
| 01.09.2014, 01:43 | |||||||||
1
|
|||||||||
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
|
| 01.09.2014, 01:55 [ТС] | |
|
Спасибо, дело идет!
Вынес из класса и компилятор перестал на это ругаться, я так понимаю, эта перегрузка литерала не только для определенного класса? Теперь новая проблема, которую я немного не понимаю, в выражении "a = a + 5i;" находится ошибка: "error: no match for 'operator+' (operand types are 'my_class' and '__complex__ int')". Но почему 5i приводится к '__complex__ int', а не используется моя перегрузка? my_class& operator""i(unsigned long long int a){ my_class b = a; return b; }
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|||
| 01.09.2014, 02:00 | |||
|
Добавлено через 2 минуты
1
|
|||
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
||||||
| 01.09.2014, 02:00 [ТС] | ||||||
|
gray_fox, спасибо, учту! Но проблему это не решило
![]() Переименовывал в разные имена, итог: "error: invalid suffix "_i" on integer constant" на строке
0
|
||||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
| 01.09.2014, 02:06 | ||||||
|
супер тупой, литералы вида 123i являются расширением gcc, как он сам нам говорит. По крайней мере в 4.7.3 ( даже при -std=c++11 ).
Добавлено через 3 минуты Рабочий пример:
1
|
||||||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|
| 01.09.2014, 02:06 | |
|
0
|
|
|
6 / 6 / 3
Регистрация: 29.08.2014
Сообщений: 97
|
|
| 01.09.2014, 02:09 [ТС] | |
|
Toshkarik, ваш пример: "error: invalid suffix "_i" on integer constant".
gray_fox, да, менял.
0
|
|
| 01.09.2014, 02:09 | |
|
Помогаю со студенческими работами здесь
20
Классы, комплексные числа и перегрузка оператора Комплексные числа. Символическая форма записи Комплексные числа - как привести к такой форме записи?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|