Make sure public inheritance models "is-a"
通常来说,基类是比派生类更加一般化的概念,所以任何希望获得一个基类的函数,都可以接受一个派生类对象作为参数。
通常来说,继承体系都有一个比较明显模型:is-a。但这里经常遇到的问题是,举个例子:
1 | class Bird { |
在这个例子中,问题出现在——企鹅是鸟,但企鹅不可以飞。也就是构造了一个不严谨的继承体系。当然,这跟你程序设计有关,有可能你设计时不希望有一个Bird::fly()的函数,那样就不会出现问题。
通常来说,我们希望的是:“public继承”则意味着is-a,也就是说,适用于base class的每一个行为也应该适用于derived class。