Удаление дублирования кода для виртуальных членов класса
Теперь я попал в странную ситуацию. Я напишу действительно упрощенную версию того же самого.
class Base { public: virtual int func1()=0; virtual int func2()=0; protected: int n; }; class der1: public Base { //implements the virtual functions of the base and uses the protected data members of the base. }; class der2: public Base { //implements the virtual functions of the base and uses the protected data members of the base. }
Теперь проблема ... и der1, и der2 реализуют виртуальные функции базы почти одинаково. Но некоторые другие классы (der3, der4) имеют свои собственные реализации. Но все равно нужно наследовать от базы.
Как мне рефакторировать код, чтобы удалить дублирование кода в ООП-манере?
Что я уже пробовал:
Я не хочу, чтобы функция имела общий код, а затем из der1 и der2 вызывала его. Это будет невозможно, если я не отправлю ему все защищенные переменные базы в качестве аргумента. Мне не очень понравился такой подход.
Итак, ищем ООП-подход для решения этой проблемы,
Rick York
- Это будет невозможно, если я не пошлю ему в качестве аргумента все защищенные переменные базы." Это неправда. Если вы делаете так, как предлагает Мистер Грифф, Intermediate предоставляет реализацию по умолчанию, и ничто другое не должно реализовывать func1 и func2, если вы не хотите отличающегося поведения. Кроме того, Intermediate будет иметь доступ ко всем открытым и защищенным членам и методам базы.