设为首页 加入收藏

TOP

C++之4种情况的对象模型
2017-02-21 08:15:20 】 浏览:399
Tags:情况 对象 模型

C++之4种情况的对象模型:1.一个空类的大小是1byte,因为要区别两个不同的object,在内存中配置独一无二的地址。

class A{}

2.4种情况的对象模型:单继承无多态,单继承有多态,多重继承,虚继承。
(1)单继承无多态
这里写图片描述

(2)单继承有多态
这里写图片描述

注意:单继承中,vptr只有一个,derived class改变base class的vptr,指向自己的vtbl。

(3)多重继承
这里写图片描述
这里写图片描述

注意
多重继承中,有多个vptr,每一个base就有一个vptr。
对象模型按照继承base顺序
对于下面代码

Vertex *pv;
Point2d *p2d;
Vertex3d v3d;
p2d=&v3d;//直接赋值
pv=&v3d;//编译器转换

上可以直接赋值的原因是Point2d 和Vertex3d 的对象模型地址是重合的。
下需要编译器加入,要偏移到Vertex的地址才能赋值。

(4)虚拟继承
这里写图片描述

虚拟继承中,对象模型中只有一个virtual base class,并且virtual base class处于模型的最下面。有两种常用模型,一种是每个直接derived base class的class的模型中都有一个指向virtual base class的指针,另一种是每个类的vtbl的负offset保存着virtual base class的偏移量。
这里写图片描述


这里写图片描述

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++中数据大小的计算 下一篇C++中构造函数初始化列表与构造函..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目