继承

2018-12-16  本文已影响0人  修夏之夏i

继承的方式

基类成员在派生类中的访问属性.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
上一篇 下一篇

猜你喜欢

热点阅读