![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
rudolfninja |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Ребят, добрый вечер. Столкнулся с проблемой и не могу придумать нормальное решение, кроме как дублирование кода.
Суть вот в чем: есть интерфейсы:
Есть классы, реализующие эти интерфейсы:
Проблема стоит в написании класса B. Класс B реализует метод calcA точно такой же, как и в классе A, но там должен быть метод calcB() и совершенно другое тело метода summaryCalc, т.к. результат будет еще зависеть и от результата calcB(), так же класс B должен реализовывать интерфейс IB и иметь свою переменную-член int b. Подскажите, пожалуйста, как правильно реализовать класс B, а то что то я не могу придумать. Спасибо. Это сообщение отредактировал(а) rudolfninja - 7.7.2014, 20:31 |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Не, IA - это абстрактный класс, он просто представляет интерфейс класса. calcA просто по смысловой части никак не относится к абстрактному классу, это просто метод, который должен быть реализован в классе A. IA менять нельзя.
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
не суть. сделайте промежуточный класс "calcA_impl"
Добавлено через 2 минуты и 33 секунды у вас А и В имеют общую часть (одинаковую реализацию calcA()), вот и поместите её в отдельный класс, который унаследуют А и B Добавлено через 12 минут и 54 секунды технически или идеологически? вы можете иметь абстрактный класс, имеющий реализацию чисто виртуальной функции http://ideone.com/2IAUcl |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
идеологически У меня есть полная реализация интерфейса IA, мне надо как-то сделать реализацию интерфейса IB, не копируя в него всю реализацию IA, а как-то сделать это через наследование. IB, по сути, это усовершенствованный несколькими методами IA. Вот и надо как-то в B реализовать только эти методы, а остальные должны тянуться из A. Я просто, что то не очень понимаю ход Ваших мыслей Это сообщение отредактировал(а) rudolfninja - 7.7.2014, 23:06 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
То есть, в классе B по-любому должна быть реализация метода calcA()? То, что класс B наследуется от CalcA_Impl и в нем есть определение этого метода - это все равно, да?
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
надо: ведь IB абстрактный, с неопределенным calcA()
Добавлено через 2 минуты и 24 секунды если компилятор позволяет, можно так http://ideone.com/9gNGTP Добавлено через 3 минуты и 51 секунду тогда можно и override использовать http://ideone.com/0GuX4B |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Я понял. Спасибо. Вопрос можно считать решенным.
|
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |