Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
#1

Наследование интерфейса схожих классов (архитектура)

22.09.2016, 10:53. Просмотров 822. Ответов 8
Метки нет (Все метки)

Имеется класс абстрактных операций. В нем есть чисто виртуальный метод operate( AbstractObj * )
C++
1
2
3
4
class Abstractperation{
public:
     virtual int operate( AbstractObj * ) = 0;
};
От него наследуются три класса. Вопрос такой. Есть операция, в которой нужно передать сверху еще дополнительный параметр - строку
C++
1
int operate( AbstractObj *, const std::string & )
Как в таком случае унаследовать интерфейс? Как преобразовать ? Логически все классы - потомки операции. Разница в том, что часть операций из серии read а часть write...как лучше поступить в плане архитектуры и интерфейса ?

Не по теме:


Случайно имя темы задал не так, как исправить не знаю. Модератор сорри.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2016, 10:53
Ответы с готовыми решениями:

Заменить наследование классов на наследование интерфейсов
#include <iostream> #include <assert.h> using namespace std; int...

Наследование классов. Копирование производных классов
Здравствуйте всем, у меня такой вопрос: написал код #include "stdafx.h" ...

Наследование переменных от интерфейса
Задача на засыпку Почему так работает template <class T> class A {...

Система классов визуального интерфейса
Тема по ООП такая: "Система классов визуального интерфейса" Использовать...

Наследование классов
Здравствуйте! Вот написан мой код ниже. Я когда пытаюсь ввести "What give...

8
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
22.09.2016, 11:00 #2
Лучший ответ Сообщение было отмечено Oryel как решение

Решение

Oryel, так реализуйте паттерн Command - в конструктор будешь передавать каждому нужные параметры, а у всех будет лишь void execute()
0
sourcerer
22.09.2016, 11:01
  #3

Не по теме:

Цитата Сообщение от Oryel Посмотреть сообщение
Случайно имя темы задал не так, как исправить не знаю. Модератор сорри.
Через форму подачи жалобы решил вопрос - всё правильно сделал. Название исправлено. Редко встретишь такую сознательность. Респект.

0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
22.09.2016, 11:21  [ТС] #4
Я реализовал паттерн, как раз чтобы сделать легче задаю вопрос. Просто вопрос в чем. Я не могу понять как красиво объединить команды, которым нужно только указатель на объект и которым нужно еще вдовесок строку передать... вот пример UML. Есть операции SetValue . .Как его в данную архитектуру вписать?

1) Могу в сразу заменить все на operate( AbstractObj *, const std::string & ), наверное только еще по умолчанию значение строки сделать. А в нужных командах использовать строку, в ненужных игнорировать
2) Могу перегрузить operate, а в ненужных классах пустышку сделать и тп.

Только звучит костыльно это все...вот и интересует как сделать сразу и хорошо?
0
Миниатюры
Наследование интерфейса схожих классов (архитектура)  
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
22.09.2016, 11:57  [ТС] #5
в конструктор будешь передавать каждому нужные параметры
Честно, не понял.
В чей конструктор?
Операции работают с строкой (класс свой AbstractString, создаются они через фабричный метод). Операции Выдают ее значение или преобразуют в другую форму. Но если надо изменить значение строки? Решил добавить класс setValue. По логике - это тоже операция. Вот е к сущности операций и приплел. Застрял на том, что банально не знаю , как лучше поступить, чтобы ее красиво использовать.

Добавлено через 1 минуту
Сорри и тебе....перепутал паттерн стратегия и команда. Попробую. Спасибо за совет

Добавлено через 26 минут
Если будут другие хорошие мысли пишите.
Пока, что попробую паттерн команда разобрать и реализовать
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
22.09.2016, 12:45 #6
Лучший ответ Сообщение было отмечено Oryel как решение

Решение

Цитата Сообщение от Oryel Посмотреть сообщение
Как в таком случае унаследовать интерфейс?
А что мешает в классе
Цитата Сообщение от Oryel Посмотреть сообщение
Abstractperation
перегрузить функцию
Цитата Сообщение от Oryel Посмотреть сообщение
operate
с двумя аргументами?
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
22.09.2016, 15:38  [ТС] #7
Цитата Сообщение от Oryel Посмотреть сообщение
2) Могу перегрузить operate, а в ненужных классах пустышку сделать и тп.
Я написал об этой идее выше.

Просто хочется знать какой вариант оптимален и т.п. Хотя это просто задания для самоконтроля, хочется выполнить го максимально осознанно и эффективно, а не для галки.

Кстати при перегрузке оператора, она будет чисто виртуальной, значит придется ее переопределять во всех потомках. А в потомках , где он не нужен просто его объявить и сделать "заглушкой"?
0
hoggy
Заблокирован
Эксперт С++
22.09.2016, 18:15 #8
Цитата Сообщение от Oryel Посмотреть сообщение
Честно, не понял.
В чей конструктор?
http://cpp-reference.ru/patterns/behavioral-patterns/command/
0
Oryel
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
23.09.2016, 08:45  [ТС] #9
Цитата Сообщение от Oryel Посмотреть сообщение
Сорри и тебе....перепутал паттерн стратегия и команда. Попробую. Спасибо за совет
Подумал, что про стратегию( т.е. не команду ) идет речь, отсюда и вопрос. А так, гуглом пользоваться умею + наличие книги о паттернах.
0
23.09.2016, 08:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2016, 08:45

Наследование классов
Доброго всем времени суток! Подскажите, куда надо положить свой базовый...

Наследование классов
Здравствуйте, имеется код: #include "stdafx.h" #include <iostream> #include...

Наследование классов
Реализовать класс, содержащий коллекцию объектов, методы для ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru