博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 类的大小计算
阅读量:6970 次
发布时间:2019-06-27

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

hot3.png

class A{};class B{	char ch;	virtual void func0()  {  }};class C{	char ch1;	char ch2;	virtual void func()  {  }	virtual void func1()  {  }};class D : public A, public C{	int d;	virtual void func()  {  }	virtual void func1()  {  }};class E : public B, public C{public:	int e;	virtual void func0()  {  }	virtual void func1()  {  }	//子类里(E)没有实现func(),所以在E的子类里B的vfptr指向C的func()和E的func1()	virtual void func123()  {  }}int main(){        //result=1,空类,大小为1        cout << "A=" << sizeof(A) << endl;                //result=8,4(vfptr,4)+4(char ch,内存对齐,4) = 8       	cout << "B=" << sizeof(B) << endl; 	  	//result=8 , 4(vfptr,4)+4(char ch1,char ch2,内存对齐,4) = 8  	cout << "C=" << sizeof(C) << endl;    		//result=12, 4(类D的vfptr,4)+4(存在基类的char ch1,char ch2,内存对齐,4)+4(int d) = 12	D obj_d; //首先VPTR指向的虚函数表中保存的是类D中的两个虚函数的地址	cout << "D=" << sizeof(obj_d) << endl;    			//result=20,(多继承)继承多少个有虚函数的类,就有多少个虚函数指针,也即这几个虚函数指针组成了自己的vfptr(编译器不再单独给自己的虚函数插vfptr)	//4(B的vfptr)+4(char ch)+4(C的vfptr)+4(C中 char ch1,char ch2)+4(E 中int d) = 20	//这个可以从调试下看出来	E obj_e;	obj_e.e = 123;	cout << "E=" << sizeof(obj_e) << endl;            return 0;}

转载于:https://my.oschina.net/Yuqingmu/blog/468947

你可能感兴趣的文章
11.16
查看>>
微信小程序中rpx与rem单位使用
查看>>
Java中只有按值传递,没有按引用传递!
查看>>
三层交换机配置路由实例
查看>>
负载均衡,NAT,ACL,VTP,DHCP,热备份,路由OSPF
查看>>
阿里云服务器安装微擎系统教程
查看>>
在Windows下如何创建虚拟环境(默认情况下)
查看>>
Linux-Nginx访问控制
查看>>
配置tomact 虚拟主机 博客
查看>>
Ubuntu 下SSH配置过程 SSH的配置过程
查看>>
exportfs命令
查看>>
linux如何使用find命令查找文件
查看>>
Linux学习笔记(五)系统目录结构、ls命令、文件类型、alias命令
查看>>
【刘文彬】 EOS行为核心:解析插件chain_plugin
查看>>
自动化运维三贱客之 SaltStack 安装
查看>>
MySQL 5.5 InnoDB 锁状态解析
查看>>
Java精选面试题之Spring Boot 三十三问
查看>>
MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决
查看>>
cwiki-us-angular-app 导入后如何添加到自己的项目
查看>>
KVM性能优化
查看>>