包小盒设计网站官网,网络优化工程师的工作内容,手机网站做seo,免费代刷网站推广一、复杂的菱形继承及菱形虚拟继承 单继承#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承。 多继承#xff1a;一个子类有两个或以上直接父类时称这个继承关系为多继承。 菱形继承#xff1a;菱形继承是多继承的一种特殊情况。 菱形继承的问题#xff1a;从…一、复杂的菱形继承及菱形虚拟继承 单继承一个子类只有一个直接父类时称这个继承关系为单继承。 多继承一个子类有两个或以上直接父类时称这个继承关系为多继承。 菱形继承菱形继承是多继承的一种特殊情况。 菱形继承的问题从下面的对象成员模型构造可以看出菱形继承有数据冗余和二义性的问题。 在 Assistant 的对象中 Person 成员会有两份。 虚拟继承可以解决菱形继承的二义性和数据冗余的问题。如上面的继承关系在 Student 和 Teacher 的继承 Person 时使用虚拟继承即可解决问题。需要注意的是虚拟继承不要在其他地 方去使用。 虚拟继承解决数据冗余和二义性的原理。 继承的总结和反思 1. 很多人说 C 语法复杂其实多继承就是一个体现。有了多继承 就存在菱形继承有了菱 形继承就有菱形虚拟继承底层实现就很复杂。所以一般不建议设计出多继承一定不要设 计出菱形继承。否则在复杂度及性能上都有问题。 2. 多继承可以认为是 C 的缺陷之一很多后来的 OO 语言都没有多继承如 Java 。 3. 继承和组合 public 继承是一种 is-a 的关系。也就是说每个派生类对象都是一个基类对象。 组合是一种 has-a 的关系。假设 B 组合了 A 每个 B 对象中都有一个 A 对象。 优先使用对象组合而不是类继承 。 继承允许你根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称 为白箱复用 (white-box reuse) 。术语 “ 白箱 ” 是相对可视性而言在继承方式中基类的 内部细节对子类可见 。继承一定程度破坏了基类的封装基类的改变对派生类有很 大的影响。派生类和基类间的依赖关系很强耦合度高。 对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象 来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复 用 (black-box reuse) 因为对象的内部细节是不可见的。对象只以 “ 黑箱 ” 的形式出现。 组合类之间没有很强的依赖关系耦合度低。优先使用对象组合有助于你保持每个类被 封装。 实际尽量多去用组合。组合的耦合度低代码维护性好。不过继承也有用武之地的有 些关系就适合继承那就用继承另外要实现多态也必须要继承。类之间的关系可以用 继承可以用组合就用组合。