是否可以将继承强制为公共,私有或受保护?
即:
class block: public shape{ // Only way to inherit from shape
};
// class block: private shape{}; // throws an error
为了使事情更清楚:
shape
的类都是公共的。例如。如果某个类试图从shape
私下继承,则应该触发编译错误。答案 0 :(得分:4)
基础通常无法决定其派生类的接口。这种约束似乎没有解决任何问题,并且可以通过限制对派生类的访问来轻松解决“强制宣传”。
例如,Square
此处为Shape
提供了一个公共界面,但由于访问保护,无论如何都无法访问Square
。
class SquaresAreAllMine {
private:
class Square : public Shape {};
};
(声明虚函数的签名是一个例外,因为派生类无法恢复到非虚拟状态。但这并不是限制性的。)