C++继承通过public、protected、private控制基类成员在派生类中的访问级别:public继承保持原访问性,体现is-a;protected继承将public/protected降为protected;private继承全降为private,接近has-a关系。
C++中的继承控制的是基类成员在派生类中的可访问性,不是简单地“复制”或“隐藏”,而是通过访问限定符(public、protected、private)重新定义这些成员对派生类内部、派生类对象以及外部代码的可见程度。
基类的 public 成员在派生类中仍是 public,protected 成员仍为 protected,private 成员不可访问(但依然存在,只是不可见)。
class Dog : public Animal
基类的
public 和 protected 成员在派生类中都变成 protected;private 成员依然不可访问。
基类的所有 public 和 protected 成员在派生类中都变为 private;private 成员依旧不可访问。
本质上,继承方式决定的是“基类接口在派生类作用域中降级成什么级别”,而不是改变基类本身的访问属性。基类 private 成员永远无法被派生类直接访问,无论哪种继承方式都一样。
基本上就这些。选对继承方式,关键看你想让谁看到什么——是用户、子类,还是仅限本类。