1. public继承表明is-a的关系,要求接口的完全继承,而private继承表明"根据某物实现出的关系",要求仅仅继承实现,private继承有两个规则:
1). 经由private继承而来的基类的所有成员在派生类中都会变成private属性
2). 由于1),编译器不允许将派生类转为基类以防止对派生类private成员的非法访问.
2. 由条款38,private继承和复合具有相同作用——"根据某物实现出".两者之间,要尽可能使用复合,除非必要情况.必要情况指的是protected成员和virtual函数牵扯进的时候以及某个极端情况(稍后会说明)下空间限制严格的时候.
复合对于private继承的优势:
假设要实现一个Widget类,而它要用到一个Time类,也就是说,要"根据Time类实现Widget类",
如果用private继承,可能像这样:
class Widget:private Timer{ public: ... private: ... }