码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 对象的内存布局

时间:2017-01-04 20:01:32      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:overwrite   .net   重复   nbsp   介绍   重载   pca   net   排列   

  之前介绍过了普通对象比如系统自带的int等对象的对齐方式,在学习类型转换的时候遇到了自定义类型的继承体系中的downcast与upcast.

于是顺藤摸瓜,摸到了这里.发现还是 陈皓的博客里面写的最早也最易懂.http://blog.csdn.net/haoel/article/details/3081328

  多重继承:

  技术分享

  在这个例子中,我找到了upcast是安全的背后原理.

  我们可以看到:

  1)  每个父类都有自己的虚表。

  2)  子类的成员函数被放到了第一个父类的表中。

  3)  内存布局中,其父类布局依次按声明顺序排列。

  4)  每个父类的虚表中的f()函数都被overwrite成了子类的f()。这样做就是为了解决不同的父类类型的指针指向同一个子类实例,而能够调用到实际的函数

  这样用父类指针来调用子类的函数时候,就直接可以在父类的虚表中调用被子类重载的函数了.

  重复继承:

  技术分享技术分享

  钻石型多重重复虚拟继承  

  这样就有个问题,同样的基类B在D中存在两遍.为了解决这个问题,就需要使用虚继承.

  技术分享

  

class B {……};

class B1 : virtual public B{……};

class B2: virtual public B{……};

class D : public B1, public B2{ …… };

  

 

c++ 对象的内存布局

标签:overwrite   .net   重复   nbsp   介绍   重载   pca   net   排列   

原文地址:http://www.cnblogs.com/luntai/p/6249974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!