A way to enforce use of interface in C++

Допустим, у меня есть класс 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

5
задан 眠りネロク 27 August 2018 в 08:55
поделиться