继承类型强制

时间:2013-12-15 06:18:21

标签: c++ inheritance

是否可以将继承强制为公共,私有或受保护?

即:

class block: public shape{ // Only way to inherit from shape
};

// class block: private shape{}; // throws an error

为了使事情更清楚:

  • 这不会导致当前状态出错
  • 我想要实现的目标是强制执行约束,其中任何派生自shape的类都是公共的。例如。如果某个类试图从shape私下继承,则应该触发编译错误。

1 个答案:

答案 0 :(得分:4)

基础通常无法决定其派生类的接口。这种约束似乎没有解决任何问题,并且可以通过限制对派生类的访问来轻松解决“强制宣传”。

例如,Square此处为Shape提供了一个公共界面,但由于访问保护,无论如何都无法访问Square

class SquaresAreAllMine {
private:
    class Square : public Shape {};
};

(声明虚函数的签名是一个例外,因为派生类无法恢复到非虚拟状态。但这并不是限制性的。)