|
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 6
|
||||||||||||||||
Проверка на корректность операции31.07.2012, 20:50. Показов 1438. Ответов 7
Метки нет (Все метки)
Добрый день.
Не знаю как лучше задать вопрос. Смысл идеи таков: Есть интерфейс типа данных (IVariable) и наследники от него, например: Number, Complex, Matrix. Необходимо реализовать функцию сложения Sum(IVariable a, IVariable b), так чтобы можно было определить возможность сложения и вернуть значение IVariable суммы чисел. Пример:
Тогда операцию сложения можно написать так:
P.S. Тип Number ничего не знает про тип Complex и Matrix, тип Complex и Matrix знают про тип Number.
0
|
||||||||||||||||
| 31.07.2012, 20:50 | |
|
Ответы с готовыми решениями:
7
Проверка на корректность
|
|
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
|
|
| 01.08.2012, 18:35 | |
|
Можно, например, сделать метод интерфейса IVariable, который принимает единственный параметр - второй операнд суммы ли других операций.
Этот метод переопределить в разных классах. Каждый класс будет проверять, является ли переданный параметр известным ему типом (тип можно хранить как атрибут или просто проверять на dynamic_cast, первый вариант, все же думаю лучше). Это решение похоже на ваше, но оно позволяет не знать классам того, что можно не знать. Что более логично.
0
|
|
|
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 6
|
|
| 01.08.2012, 18:53 [ТС] | |
|
gooseim, спасибо что подтвердили мою теорию.
А что касается передачи одного параметра, то я наверно не до конца описал задачу, в дальнейшем потребуется переопределить *,/,- и тогда встанет вопрос как разделить, что операция Number*Matrix - является корректной, а Number+Matrix - нет. Насколько я понимаю это единственный вариант?
0
|
|
|
|
|||||||||||
| 01.08.2012, 18:53 | |||||||||||
|
Вариант 1:
Реализовать свой класс исключений и ловить их при выполнении операций
0
|
|||||||||||
|
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
|
|
| 01.08.2012, 19:17 | |
|
Tochka, когда будет другая операция, для нее будет другой виртуальный метод и т.д. Т.е. проверка должна осуществляться в методе операции. Причем в методе производного класса.
Добавлено через 22 минуты Если делать проверку на валидность в базовом классе, мы нарушим идеологию ООП. Базовый класс не должен ничего знать о своих потомках. И потомки должны знать по минимуму друг о друге.
0
|
|
|
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 6
|
||
| 01.08.2012, 19:28 [ТС] | ||
|
gooseim, может быть я что-то не понимаю, но я планировал перегрузить операторы вида
"operator Op (IVariable)", а так как, я заведомо не знаю какой тип стоит с лева, а какой с права то предполагал проверку на на знание типа (исходя из неё и переставлять местами элементы). Avazart, исходя из вашей логики Number+Complex - будет выдавать ошибку, а Complex+Number - будет выдавать правильный вариант? Добавлено через 2 минуты
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 01.08.2012, 19:28 | |
|
Эта тема - прямо-таки классический пример ситуации, для которой придумали double dispatch.
0
|
|
|
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
|
||
| 01.08.2012, 19:54 | ||
|
В общем, походу нет красивого решения, как сделать, чтобы операция a + b возвращала тоже самое, что b + a, если b и a разного типа.
0
|
||
| 01.08.2012, 19:54 | |
|
Помогаю со студенческими работами здесь
8
Проверка строки на корректность Проверка на корректность входных данных
Префиксное дерево, проверка на корректность Проверка на корректность логического выражения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|