| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с многоуровневым наследованием |
| Автор: rudolfninja 7.7.2014, 20:27 | ||||
| Ребят, добрый вечер. Столкнулся с проблемой и не могу придумать нормальное решение, кроме как дублирование кода. Суть вот в чем: есть интерфейсы:
Есть классы, реализующие эти интерфейсы:
Проблема стоит в написании класса B. Класс B реализует метод calcA точно такой же, как и в классе A, но там должен быть метод calcB() и совершенно другое тело метода summaryCalc, т.к. результат будет еще зависеть и от результата calcB(), так же класс B должен реализовывать интерфейс IB и иметь свою переменную-член int b. Подскажите, пожалуйста, как правильно реализовать класс B, а то что то я не могу придумать. Спасибо. |
| Автор: baldina 7.7.2014, 20:58 | ||
реализуйте его в классе IA |
| Автор: rudolfninja 7.7.2014, 21:01 |
| Не, IA - это абстрактный класс, он просто представляет интерфейс класса. calcA просто по смысловой части никак не относится к абстрактному классу, это просто метод, который должен быть реализован в классе A. IA менять нельзя. |
| Автор: baldina 7.7.2014, 22:01 |
| не суть. сделайте промежуточный класс "calcA_impl" Добавлено через 2 минуты и 33 секунды у вас А и В имеют общую часть (одинаковую реализацию calcA()), вот и поместите её в отдельный класс, который унаследуют А и B Добавлено через 12 минут и 54 секунды технически или идеологически? вы можете иметь абстрактный класс, имеющий реализацию чисто виртуальной функции http://ideone.com/2IAUcl |
| Автор: rudolfninja 7.7.2014, 22:41 |
идеологически У меня есть полная реализация интерфейса IA, мне надо как-то сделать реализацию интерфейса IB, не копируя в него всю реализацию IA, а как-то сделать это через наследование. IB, по сути, это усовершенствованный несколькими методами IA. Вот и надо как-то в B реализовать только эти методы, а остальные должны тянуться из A. Я просто, что то не очень понимаю ход Ваших мыслей |
| Автор: baldina 8.7.2014, 09:57 |
| ход мыслей таков http://ideone.com/UD577O |
| Автор: rudolfninja 8.7.2014, 13:18 |
| То есть, в классе B по-любому должна быть реализация метода calcA()? То, что класс B наследуется от CalcA_Impl и в нем есть определение этого метода - это все равно, да? |
| Автор: baldina 8.7.2014, 13:40 |
| надо: ведь IB абстрактный, с неопределенным calcA() Добавлено через 2 минуты и 24 секунды если компилятор позволяет, можно так http://ideone.com/9gNGTP Добавлено через 3 минуты и 51 секунду тогда можно и override использовать http://ideone.com/0GuX4B |
| Автор: rudolfninja 8.7.2014, 14:09 |
| Я понял. Спасибо. Вопрос можно считать решенным. |
| Автор: NoviceF 8.7.2014, 15:01 |