继承

继承的方式

基类成员在派生类中的访问属性.jpg

class默认继承权限:private
struct默认继承权限:public

赋值兼容规则----public继承方式

is a:可以将派生类对象看成一个基类的对象,在所有使用基类对象的位置,可以使用派生类对象来进行替换。

1.派生类对象可以给基类对象赋值,反之不行。
2.基类的指针或者引用可以指向派生类的对象,反之不行。

继承体系中的作用域

1.基类与派生类属于不同的作用域
2.同名隐藏
__基类与派生类拥有相同的成员(成员变量or成员函数),派生类调用时优先调用派生类中的成员。

友元:友元关系不可继承。
静态成员:可以继承,并且在整个继承体系中只有一份。

对象模型

单继承:一个子类只有一个直接父类时称这个继承关系为单继承。
image.png

多继承:一个子类有两个或者两个以上直接父类时称这个继承关系为多继承。(eg.sizeof(D)==12)(int)
image.png

菱形继承:菱形继承是多继承的一种特殊情况。

__菱形继承的弊端:数据冗余and二义性(sizeof(D)==20)
image.png

菱形继承解决二义性:
1.加作用域
2.虚继承

class B{
public:
      int -b;
};

class D:virtual public B{
public:
  int _d;
};

sizeof(D)==12
image.png

普通单继承&虚拟继承不同:
1.对象模型不同
2.对基类部分成员的访问方式
3.虚拟继承:用户没有显示定义派生类的构造函数,编译器会生成一个默认的构造函数。
__将偏移量表格的地址放到对象前四个字节中

__参数控制 >> push 1 >> 虚拟继承标记
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类的继承与派生 类的继承就是新类由已经存在的类获得已有特性,类的派生是由已经存在的类产生新类的过程。已有类叫做基类...
    Mr希灵阅读 637评论 0 1
  • 转自大神博客凡程子 一、基本概念 类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是类的派...
    leon4ever阅读 498评论 0 0
  • 刚定下计划,要100天坚持每天写一篇至少一千字的文章。开始的时候以势如破竹气势更新了几天,之后,就歇菜了。我开始“...
    蹒跚学步阅读 960评论 9 8
  • 不管和家人怎么样吵,离家久了,等待归期的日子是最难熬的,时时刻刻想着回家要妈妈做什么吃的,而我因为后天就可以回家过...
    A橙子_bf95阅读 157评论 0 0