|
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 6
|
||||||||||||||||
Проверка на корректность операции31.07.2012, 20:50. Показов 1503. Ответов 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
Проверка строки на корректность Проверка на корректность входных данных
Префиксное дерево, проверка на корректность Проверка на корректность логического выражения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|