引自原来在CGD讨论的几点总结:
1. public继承被称为类型继承(type inheritance)。往往反映is-a关系。
2. protected继承基类的所有公有成员都成为派生类的protected成员。这意味着它们可以被后来从该类派生的类访问,但不能在层次结构之外被访问。
3. private继承被称为实现继承(implementation inheritance)。派生类提供自己的公有接口,重用基类的实现。
数据成员的访问域变化:
1. public继承的话,原来父类的public ,protected成员继承到子类中,类型不变员
2. protected继承的话,原来父类的public ,protected成员继承到子类中,并成为protected类型成员
3. private继承的话,原来父类的public ,protected成员继承到子类中,并成为private类型成员
PS一下
理想情况下,是能不用public就不用,因为一旦public就引发一系列如client可以用base pointer去new inherit class,则dtor需要是virtual的问题
但大多数情况下都是public的情况,大家对此也比较熟悉,所以下面谈谈不常见的情况
在private inheritance时,如果不存在必须实现virtual method的情况下,推荐选择composition,避免了未来可能的multi inheritance导致出现的讨厌的菱形结构从而引发出现的C++阴暗面: virtual inheritance,即不要因为只是想少敲点代码而失去了良好的设计
protected和private区别在于:如果只是为了重用code,在不能composition的情况下则优先考虑private,除非派生类还会需要或是有可能会被其他类继承的话,才需要变成protected。