13-继承

作者: ducktobey | 来源:发表于2019-11-18 23:21 被阅读0次

继承

继承,可以让之类拥有父类的所有成员(变量/函数)

假设现在定义了如下两个类,一个是Student,一个是Worker,没个类中有自己的成员变量与函数。

struct Student {
    int m_age;
    int m_score;
    void run() {
    }
    void study() {
    }
};

struct Worker {
    int m_age;
    int m_salary;
    void run() {
    }
    void work() {
    }
};

现在很明显发现一个特点,这两个类是有一些共性的,大家都有m_age这个成员变量,大家都会跑步,但是也有一些个性化的东西,Student有自己的m_score,需要学习,Worker有自己的m_salary,需要工作,像这些共性的东西,一般来讲,都会抽到一个新的类中,将原有类中,个性化的东西留下,让后让原来的类,继承自新创建的类。通过继承建立类父子关系,这样子类就可以访问到父类中公共的成员变量与函数了。所以上面的代码,调整后为

struct Person {
    int m_age;
    void run() {
    }
};

struct Student : Person {
    int m_score;
    void study() {
    }
};

struct Worker : Person {
    int m_salary;
    void work() {
    }
};

所以看出,继承有一个很明显的好处就是代码可以重用,把公共的东西都统一放到一个类里面,然后其他类统一继承自该类,这就是继承的一个好处。所以最终如果创建一个Student对象的话,可以直接访问m_age的成员变量,也可以访问run()函数。

Student student;
student.m_age = 20;
student.m_score = 100;
student.run();
student.study();

Person与Student的关系描述

  • Student是子类(subclass,派生类)
  • Person是父类(superclass,超类)

对象的内存布局

如果现在定义了如下的三个类,并且为依次继承的关系

struct Person {
    int m_age;
};

struct Student : Person {
    int m_no;
};

struct GoodStudent : Student {
    int m_money;
};

现在利用以上的几个类,创建出对应的对象,你知道这些对象在内存中分别占用多少个字节吗?相信你肯定知道,一个Person对象占用4个字节,一个Student对象占用8个字节,一个GoodStudent对象占用12个字节。

就拿GoodStudent创建的gs对象来说,假设m_age赋值为20,m_no赋值为1,m_money赋值为666,这12个字节在内存中是如何排布的呢?哪个成员变量排前面,哪个成员变量排后面呢?直接公布答案吧,这个直接打印成员变量地址就可以得出来,下图就是一个gs对象的内存布局

并且,从图中可以看出,每个成员变量占用4个字节的内存空间,而且也可以得出一个结论,从父类继承的成员变量会排在对象内存空间的前面,子类的成员变量在内存空间的后面。知道了GoodStudent创建出的对象的内存布局后,Student类创建出来的对象,肯定也就清楚了。

demo下载地址

文章完。

相关文章

  • 13-继承

    实现继承 1.借用构造函数(第一种) 1.先把大范围的构造函数写出来 2.借用大范围的构造函数创造对象 3.缺点:...

  • 13-继承

    继承 继承,可以让之类拥有父类的所有成员(变量/函数) 假设现在定义了如下两个类,一个是Student,一个是Wo...

  • 李善友课程笔记13-从递弱代偿原理中推导出非连续性模型

    李善友课程笔记13-从递弱代偿原理中推导出非连续性模型

  • OC底层原理14-消息转发机制

    我们在 OC底层原理13-动态方法决议[https://www.jianshu.com/p/a7550ccefae...

  • 继承 继承

    属性拷贝 继承不单单能通过原型链实现,也能通过其他方式实现,属性拷贝就是其中一种方法。 通过属性拷贝也能实现继承子...

  • 民情日记—103

    2018年9月13日 星期四 今天,继续昨天的工作。…… 2018/9/13-杨洪富

  • 继承(单继承,多继承)

    将共性的内容放在父类中,子类只需要关注自己特有的内容 python中所有的内容都是对象,所有的对象都直接或间接继承...

  • js继承方式

    类式继承 构造函数继承 组合继承 类式继承 + 构造函数继承 原型式继承 寄生式继承 寄生组合式继承 寄生式继承 ...

  • 13-画布

    复习JS高级 1、构造函数 如果一个函数配合new关键字创建对象,那么这个函数就可以称之为构造函数。 构造函数有个...

  • 13-列表

    List定义 列表是python中使用最频繁的数据类型,在其他语言中称为数组。 专门用于存储一窜信息。 列表用[]...

网友评论

      本文标题:13-继承

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