继承

作者: 修夏之夏i | 来源:发表于2018-12-16 22:34 被阅读0次

    继承的方式

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

    相关文章

      网友评论

          本文标题:继承

          本文链接:https://www.haomeiwen.com/subject/wxnxkqtx.html