C++学习笔记(8)----C++类的大小
C++类的大小
(i)
如下代码:
#include<iostream>
using namespace std;
class CBase {
};
class CDerive :public CBase {
};
int main(int argc, char* argv[])
{
CDerive p[3];
cout << "sizeof(CBase)=" << sizeof(CBase) << endl
<< "sizeof(CDerive)=" << sizeof(CDerive) << endl;
cout << "sizeof(p)=" << sizeof(p) << endl;
cout << "&p[0]=" << &p[0] << endl
<< "&p[1]=" << &p[1] << endl
<< "&p[2]=" << &p[2] << endl;
return 0;
}
运行结果为:
S:\ComputerTech\VS2015\Release>Test.exe
sizeof(CBase)=1
sizeof(CDerive)=1
sizeof(p)=3
&p[0]=002CF7B8
&p[1]=002CF7B9
&p[2]=002CF7BA
(ii)
将上述代码中的CBase类重新声明如下:
class CBase {
int num;
};
class CDerive :public CBase {
};
再次运行上述程序,结果如下:
S:\ComputerTech\VS2015\Release>Test.exe
sizeof(CBase)=4
sizeof(CDerive)=4
sizeof(p)=12
&p[0]=0023FD88
&p[1]=0023FD8C
&p[2]=0023FD90
(iii)
将(i)中的CBase类声明如下:
class CBase {
int num;
double d;
};
class CDerive :public CBase {
};
运行结果:
S:\ComputerTech\VS2015\Release>Test.exe
sizeof(CBase)=16
sizeof(CDerive)=16
sizeof(p)=48
&p[0]=001DFA98
&p[1]=001DFAA8
&p[2]=001DFAB8
(iv)
将(i)中的CBase类和CDerive类声明如下:
class CBase {
int num;
};
class CDerive :public CBase {
int num2;
};
运行结果:
S:\ComputerTech\VS2015\Release>Test.exe
sizeof(CBase)=4
sizeof(CDerive)=8
sizeof(p)=24
&p[0]=0032F734
&p[1]=0032F73C
&p[2]=0032F744
(v)
将(i)中的CBase类和CDerive类声明如下:
class CBase {
int num;
};
class CDerive :public CBase {
double d;
};
运行结果:
S:\ComputerTech\VS2015\Release>Test.exe
sizeof(CBase)=4
sizeof(CDerive)=16
sizeof(p)=48
&p[0]=0041FE38
&p[1]=0041FE48
&p[2]=0041FE58
总结:
当类中含有变量时,类的大小就像普通的结构体那样去计算,大小为地址对齐后的所有变量的总的大小;当类中不含任何变量时,类的大小并非为0,而是为1个字节(如(i)所示)。
C++学习笔记(8)----C++类的大小的更多相关文章
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Caliburn.Micro学习笔记(一)----引导类和命名匹配规则
Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...
- python cookbook第三版学习笔记十:类和对象(一)
类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair: def __init__(self,x,y): self.x=x self. ...
- Java学习笔记16---抽象类与接口的浅显理解
抽象类是由abstract修饰的类,定义方式如public abstract class A{...}. 接口由interface修饰,定义方式如public interface B{...}. 抽象 ...
- java学习笔记7--抽象类与抽象方法
接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...
- 【C语言学习笔记】存储类、链接和内存管理
因为对内存管理部分一直没有很清楚的思路,所以一直在找资料想系统看一下这部分的内容.在C primer plus里看到了这一章,虽然大多都是心知肚明的东西,但是还是很多概念性系统性的东西让我眼前一亮,把 ...
- bootstrap学习笔记--bootstrap排版类的使用
标题 Bootstrap 中定义了所有的 HTML 标题(h1 到 h6)的样式,这个和一般的html没啥区别.请看下面的实例: <h1>测试1 h1</h1> <h2& ...
随机推荐
- c/c++ int,float,short 大小端转换函数
unsigned int(uint32_t)大小端转换函数 unsigned int BLEndianUint32(unsigned int value) { return ((value & ...
- 说说MySQL权限
前言 今天继续MySQL系列文章,讲讲MySQL权限相关的内容.我们都知道,在写系统的时候,都会有权限相关的服务,以达到权限控制的目的.以最简单的权限菜单为例: 管理员拥有最大权限,可以查看系统下所有 ...
- PHP反序列化漏洞新攻击面(BlackHat 2018)
0x00 前言 入职以来好久没有写过文章了,入职的时间里也和师傅们学到了很多,认识了很多的新朋友.最近因为BlackHat 黑客大会的一个议题,PHP反序列化漏洞利用被挖掘出新的攻击面.这里本着记 ...
- centos 7 查看所有登录用户的操作历史
2019-01-07 转自 https://www.cnblogs.com/kevingrace/p/7373146.html centos 7 查看所有登录用户的操作历史 在Linux系统的环境下 ...
- (转)CentOS7安装KVM虚拟机详解
原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E ...
- Oracle练习笔记
1 基本查询 SQL> --当前用户 SQL> show user USER 为 "SCOTT" SQL> --当前用户下的表 SQL> select * ...
- 05 JDK1.5 Lock锁
一.synchronized的再次讨论 使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时, 这个线 ...
- SQL 常用脚本,非常适用
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- HDU 6187 Destroy Walls
Destroy Walls Long times ago, there are beautiful historic walls in the city. These walls divide the ...
- Maven 打包的时候报 Failed to execute goal org.codehaus.mojo:native2ascii-maven-plugin
错误信息: [ERROR] Failed to execute goal org.codehaus.mojo:native2ascii-maven-plugin:1.0-alpha-1:native2 ...