Перегрузка чисто виртуальной функции

Я обычно использую чисто виртуальные функции для тех методов, которые требуются моему коду для нормальной работы. Поэтому я создаю интерфейсы, а затем другие пользователи реализуют свои производные классы. Производные классы имеют только эти виртуальные функции как публичные, в то время как некоторые дополнительные методы должны быть реализованы как закрытые, так как мой код их не вызывает. Я не знаю, можно ли это считать хорошей практикой ООП (есть ли шаблон проектирования?). В любом случае, мой вопрос: может ли пользователь перегружать чисто виртуальную функцию?

то есть

class Base
{
public:
 Base();
 virtual ~Base();
 virtual void foo(int,double)=0;
};

class Derived:
public Base
{
 private:
  // methods
 public:
 Derived();
 virtual ~Derived();
 virtual void foo(int, double, double); //this doesn't work
 };

Решение может быть:

 virtual void foo(int,double,double=0)=0;

в базовом классе, но это очень ограничено. О чем вы думаете?

Ответы на вопрос(6)

Ваш ответ на вопрос