Допустим, у меня есть класс Derived
, который реализует интерфейсный класс BaseInterface
, где BaseInterface
имеет только чисто виртуальный функции и виртуальный деструктор:
class BaseInterface
{
public:
virtual void doSomething() = 0;
~BaseInterface(){}
};
class Derived : public BaseInterface
{
public:
Derived() {}
~Derived(){}
protected:
virtual void doSomething();
private:
int x;
};
Никакие классы вне иерархии классов Derived
не должны вызывать Derived :: doSomething ()
напрямую, то есть доступ к ним должен быть полиморфным только через Класс BaseInterface
. Чтобы обеспечить соблюдение этого правила, я сделал Derived :: doSomething ()
защищенным. Это работает хорошо, но я ищу мнения за / против относительно этого подхода.
Спасибо!
Ken