博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++对象模型
阅读量:5885 次
发布时间:2019-06-19

本文共 1290 字,大约阅读时间需要 4 分钟。

一、C++对象模型

C++对象模型包括两个层次:

1. 语言层面:语言总直接支持面向对象程序设计的部分;

2. 编译器层面:对于各种支持的底层实现机制。

C++对象模型的“不变量”,是指对象模型是在编译时期确定的,没有办法在执行期动态增加或修改。

二、对象模型概览

1. C++对象模型组成

   (1)数据:static和nonstatic

   (2)函数:static\、nonstatic、virtual

   (3)继承:单继承、多继承和虚拟继承

2. 简单对象模型

   对象由slots组成,每个slot指向一个数据成员或成员函数。基类作为一个数据成员,也占有一个slot。

   优点:避免成员数据类型造成的对象大小不同,

   缺点:占用新的空间,间接性导致存取时间增加。

3. 表格驱动模型

   对象采用成员函数表和数据成员表组成。每个表包含多个slots,指向成员数据或者成员函数。

4. C++对象模型

   (1)nonstatic成员数据保存在每个class object内部;

   (2)static成员数据保存在所有的class object对象之外;

   (3)static和nonstatic成员函数则放在所有的class object对象之外;

   (4)virtual成员函数则采用间接访问:

       a.每个class产生一堆指向virtual成员函数的指针,放在表格中,称为virtual table;

       b.每个class object添加一个指针,指向,称为vptr。

       c.vptr的设定和重置都是由class的构造函数、析构函数和复制赋值运算符来完成。

       d.每个class所关联的类型信息也是保存在virtual table中,通常放在表格的第一个slot中。

   (5)virtual base class采用virtual base table或通过扩充virtual table来维护每一个virtual base table的位置。

5.对象模型差异

   (1)过程模型procedural model:分离的数据和函数,函数只是用来处理数据;

   (2)抽象数据类型模型abstract data type model:采用一组公开接口表达抽象;

   (3)面向对象模型object-oriented model:通过抽象的基类封装相关的类型,提供共通的接口。

        a.面向对象程序员需要处理的是一个未知对象,但是该对象的类型受限于其继承体系;

        b.面向对象通过指针和引用操作类对象,继承层次间的赋值操作会导致对象信息损失;
        c.ADT编程范型中的对象是一个拥有固定而单一类型的实体,在编译期已经确定;
        d.面向对象通过public class组织类型,并利用指针和引用操作类对象实现多态,C++的多态通过如下方式实现:
            i.把派生类指针转化为基类指针;
            ii.经由虚函数机制调用接口;
            iii.把派生类指针转化为基类指针;
        a.面向对象通过指针和引用操作类对象,

 

转载于:https://www.cnblogs.com/blockcipher/archive/2013/05/17/3083962.html

你可能感兴趣的文章
隐藏nginx版本号
查看>>
利用shell的expect实现自动登录服务器
查看>>
fio的使用
查看>>
dyninst codecoverage
查看>>
Serv-U FTP Server 错误代码详解
查看>>
xfs 分区格式化
查看>>
洁净触手可得—LG WD-VH455D1洗衣机使用体验记
查看>>
[C#]回车键实现输入光标的切换及系统快捷键的屏蔽
查看>>
高效职业人的8大习惯
查看>>
java线程系列---synchronized详解
查看>>
PMP备考总结_9.13
查看>>
linux 网站架设调优Apache(三)
查看>>
在32位Win7下安装MySQL5.7.10安装配置过程
查看>>
squid透明代理和反向代理配置过程
查看>>
汽车常识全面介绍 - 传动系统
查看>>
vim攻略
查看>>
51CTO交流摘录(1):SOC的定义、适用性和组成
查看>>
关于数据包分析中Fragment offset(分片偏移)字段的十六进制码解读
查看>>
suse linux 安装无线网卡驱动
查看>>
jetty9系列之应用部署
查看>>