在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;
};
Run Code Online (Sandbox Code Playgroud)
Derived类层次结构之外的类不应该Derived::doSomething()直接调用,即,只应通过BaseInterface类以多态方式访问它.为了执行这条规则,我已经取得了Derived::doSomething()保护.这很好用,但我正在寻找关于这种方法的意见/赞成.
谢谢!
肯
我认为您正在寻找非虚拟接口(NVI)模式:一个public非虚拟接口,它调用受保护或私有virtual实现:
class BaseInterface
{
public:
virtual ~BaseInterface(){}
void doSomething() { doSomethingImpl(); }
protected:
virtual void doSomethingImpl() = 0;
};
class Derived : public BaseInterface
{
public:
Derived() {}
virtual ~Derived(){}
protected:
virtual void doSomethingImpl();
private:
int x;
};
Run Code Online (Sandbox Code Playgroud)