群晖nas做网站性能seo实战培训班
在之前论证过c++如何将public 继承视为 is-a 关系。在哪个例子里,class Student 以 public 形式继承class Person, 于是编译器在必要时刻将Students暗自转化为Person.如果此时我们以 private 继承替换 public继承。
class Person {...};
class Student: private Person {...}; // 改用private继承void eat(const Person& p);
voide study(const Student& s);Person p; // P是人
Student s; // s是学生
eat(p); // 没问题,p是人,会吃
eat(s); // 错误!
显然private 继承并不意味着 is-a 关系,那意味着什么?在这之前我们需要明确 private 继承的意义。
- 如果class 之间的继承关系是 private, 编译器不会自动将一个 derived class 对象 转换成 基类对象。这和 public 继承的情况不同,这也就是为什么通过 s调用 eat 会失败的原因。
- 由private base class 继承而来的所有成员,在derived class 中都会变成private 属性,纵使他们在base class 原本是protected 或public 属性。
现在可以讨论其显示意义。Private继承意味着 implemented-in-terms-of(根据某物实现出)。如果你让class D 以 private形式继承class B, 你的用意是为了采用 class B 内已经备妥的某些特性,不是因为B 对象和D对象存在有任何观念上的关系。
额,没有明白 private 的实际意义,等用到再说吧。。。。。。