CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

菱形虚拟继承后,派生类的大小问题

楼主wyylbl(清木子)2002-05-11 18:46:57 在 C/C++ / C语言 提问

#include<iostream.h>  
  class   p  
  {private:  
  int   pri1,pri2;  
  };  
  class   D1:   private   p     //virtual   private   p  
  {private:  
  int   pri3;  
  };  
  class   D2:public   p       //virtual   public   p  
  {private:  
  int   pri4;  
  };  
  class   D12:private   D1,public   D2  
  {   private:  
  int   pri12;  
  };  
  void   main()  
  {    
      cout<<sizeof(D1)<<'   '<<sizeof(D2)<<'   '<<sizeof(D12)<<endl;  
  }  
  结果是12,12,28(可以理解)  
  但是改为virtual   private   p和virtual   public   p后  
  结果是16,16,28    
  为什么???  
   
  问题点数:20、回复次数:7Top

1 楼steedhorse(晨星)回复于 2002-05-11 18:56:45 得分 5

多了个4字节的虚函数指针。Top

2 楼steedhorse(晨星)回复于 2002-05-11 18:57:28 得分 0

找一本讲的深一点的的C++书来看看吧。Top

3 楼wyylbl(清木子)回复于 2002-05-11 19:26:16 得分 0

to   steedhorse(晨星)  
  D12的对象所占的28个字节里除了包含pri1,pri2,pri3,pri4,pri12这5个数据成员外,是否还包含2个虚函数指针?  
  Top

4 楼greening(逆风寒翎)回复于 2002-05-11 19:58:50 得分 5

各有一个4字节的指向Virtual   table   for   p的可取名叫vptr指针。Top

5 楼c_antinomy(开始了,却没有感觉!)回复于 2002-05-11 20:02:20 得分 1

一般都与编译器的实现方式有一定关系。Top

6 楼coppermine(coppermine)回复于 2002-05-11 21:20:28 得分 8

简单的说,   通过虚拟继承实现的派生类即需要能够定位其共同基类  
  的位置,   又要实现各种多态操作,而且不能受派生类层次的影响,   因此对  
  共同基类的定位只有间接进行.   一般是通过一个指针,具体是指针直接定位还是指针指向一个表,由表中的某一项定位,就要看具体的实现了.  
  详细讨论可见inside   c++   object   modelTop

7 楼magicblue(小飞侠)回复于 2002-05-11 21:41:10 得分 1

to:steedhorse  
  你说的那个不叫虚函数指针……Top

相关问题

  • 派生与继承!!!
  • 继承与派生的问题
  • Dao的继承类的派生问题
  • 继承(派生、重载)类的问题
  • 直接派生和继承派生问题
  • 一个虚拟继承问题。
  • 虚拟继承下的Vptr指针?
  • 关于继承虚拟类的问题
  • 由虚拟继承引出的问题?
  • 虚拟继承中的一个问题

关键词

  • virtual
  • private
  • int pri

得分解答快速导航

  • 帖主:wyylbl
  • steedhorse
  • greening
  • c_antinomy
  • coppermine
  • magicblue

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo