C++继承模式详解

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有的特性基础上进行扩展,增加功能,这样产生新的类,称作是派生类。继承呈现了面向对象程序设计的层析结构,体现了由简单到复杂的认知过程。继承是类

我们可以通过内存窗口来观察对象成员的模型


	D d;
	d.B::_a = 1;
	d.C::_a = 2;
	d._b = 3;
	d._c = 4;
	d._d = 5;
	B b = d;//把d赋给b,把d切过去那此时要怎么找到A呢?,所以就要用虚基表找

B类中各个成员在内存中的分布:

继承的总结

  • C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。
  • 多继承可以认为是C++的缺陷之一.

组合

继承是建立了父类与子类的关系,是一种“是”的关系,例如白猫是猫,组合是“有”的关系实际尽量多去用组合。组合的耦合度低,代码维护性好。不过继承也有用武之地的,有些关系就适合继承那就用继承,另外要实现多态,也必须要继承。类之间的关系可以用继承,可以用组合就用组合。

面试题

  • 什么是菱形继承?菱形继承的问题是什么?
    菱形继承是多继承的一种特殊继承,两个子类继承同一个父类,而又有子类同时继承这两个子类。可以看出菱形继承有数据冗余和二义性的问题。
  • 什么是菱形虚拟继承?如何解决数据冗余和二义性的
    在菱形继承的腰部加上virtual,通过虚基表指针和虚基表中的偏移量可以找到虚基类,只存1份
  • 继承和组合的区别?什么时候用继承?什么时候用组合?
    继承是一种"是",组合是"有"的关系,父类和子类是的关系用继承,是有的关系用组合。

以上就是C++继承,由于作者水平有限,如有问题还请指出!

到此这篇关于C++继承模式详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程学习网。

本文标题为:C++继承模式详解