1、概述
C++ 中的继承可以是单一继承或者多重继承,每一个继承连接可以是 public,protect 或 private,也可以是 virtual 或 non-virtual。但是这些继承方面的关系是怎么的?选择使用哪一种继承时的标准是什么?我们总是给忽略掉,前面我们整理了一部分 virtual 和 non-virtual 继承注意事项 ,今天在整理另一部分。
2、确定 public 继承是 is-a 关系
C++ 面向对象的编程中,最重要的一个规则是:公开继承意味着 “is-a” (是一种)的关系。
如果你令 class D 以 public 形式继承 class B,你便是告诉 C++编译器,每一个类型为 D 的对象同时也是一个类型为 B 的对象,反之不成立。比如:每个学生都是人,但并非每个人都是学生。
class Person { ...... };
class Student : public Person { ...... };
public 继承和 is-a 之间的等价关系听起来颇为简单,但有时候你的直觉会误导你。比如:鸟可以飞,企鹅是一种鸟。
class Bird
{
public:
virtual void fly(); //鸟可以飞
};
class Penguin : public Bird //企鹅是一种鸟
{
...
};
这个例子中,我们考虑不严谨造成了这个错误,并不是说所有的鸟都会飞,而是一般的鸟都有飞行能力。以下的继承关系,能更好的表现出真实性:
class Bird
{
...
};
class FlyingBird : public Bird
{
public:
virtual void fly();