美文网首页
3.1继承时的对象模型

3.1继承时的对象模型

作者: tomchan | 来源:发表于2015-10-06 17:37 被阅读38次

没有继承时对象内存的分布情况。这时的内存模型很简单,成员变量和成员函数会分开存储:

对象的内存中只包含成员变量,存储在栈区或堆区(使用new创建对象);

成员函数与对象内存分离,存储在代码区。

当存在继承关系时,内存模型会稍微复杂一些。

继承时的内存模型

有继承关系时,派生类的内存模型可以看成是基类成员变量和新增成员变量的总和,所有成员函数仍在另外一个区域——代码区,由所有对象共享。

成员变量按照派生的层级依次排列,新增成员变量始终在最后。

有成员变量遮蔽时的内存分布

当基类A、B的成员变量被遮蔽,仍然会留在派生类对象obj_c的内存中,C类新增的成员变量始终排在基类A、B的后面。

总结:派生类的对象模型中,会包含所有基类的成员变量。这种设计方案的优点是访问效率高,能够在派生类对象中直接访问基类变量,无需经过好几层间接计算。

相关文章

  • 3.1继承时的对象模型

    没有继承时对象内存的分布情况。这时的内存模型很简单,成员变量和成员函数会分开存储: 对象的内存中只包含成员变量,存...

  • (boolean) week4

    对象模型 1.继承函数是继承函数的调用权,并非大小 2.多态的定义 相同对象收到不同消息或不同对象收到相同消息时产...

  • C++继承时内存对象模型

    这两篇博客都详细讲解了C++对象模型,链接如下:http://www.cnblogs.com/QG-whz/p/4...

  • JavaScript面向对象的程序设计

    目录 导语 1.理解对象和面向对象的程序设计 2.创建对象的方式 3.JavaScript的继承机制 3.1 原型...

  • C++笔记五(面向对象编程下)

    十六 对象模型:关于vptr和vtbl 如图模型所示,B类继承A类,C类继承B类,子类有父类的成分,继承的包括数据...

  • RYF javascript笔记2

    3. 标准库 3.1Object对象 3.1.1概述 js提供一个Object对象,所有其他对象都继承自它。Obj...

  • 第七章:类的继承

    继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。...

  • 模型

    模型 - 什么是模型? - 专门用来存放数据的对象 - 一般都是一些直接继承自NSObject的纯对象...

  • C++虚函数和虚继承探秘

    什么是继承?什么是多重继承?多重继承存在变量和函数名冲突怎么办?子类对象和父类对象的内存模型是什么样的?虚继承如何...

  • 10、Django_模型类的继承以及用包来管理模型类

    面向对象语言的三大特性:多态、封装、继承。Django中模型类也拥有这些特性,本章说明下模型类的继承 概述 Dja...

网友评论

      本文标题:3.1继承时的对象模型

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