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++类的大小的更多相关文章

  1. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  2. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  3. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

    Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...

  5. python cookbook第三版学习笔记十:类和对象(一)

    类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair:     def __init__(self,x,y):         self.x=x         self. ...

  6. Java学习笔记16---抽象类与接口的浅显理解

    抽象类是由abstract修饰的类,定义方式如public abstract class A{...}. 接口由interface修饰,定义方式如public interface B{...}. 抽象 ...

  7. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  8. 【C语言学习笔记】存储类、链接和内存管理

    因为对内存管理部分一直没有很清楚的思路,所以一直在找资料想系统看一下这部分的内容.在C primer plus里看到了这一章,虽然大多都是心知肚明的东西,但是还是很多概念性系统性的东西让我眼前一亮,把 ...

  9. bootstrap学习笔记--bootstrap排版类的使用

    标题 Bootstrap 中定义了所有的 HTML 标题(h1 到 h6)的样式,这个和一般的html没啥区别.请看下面的实例: <h1>测试1 h1</h1> <h2& ...

随机推荐

  1. 配置不同站点不同版本PHP

    Apache 配置 1.常规手动部署apache方法(不会apache配置的请先移步看下Apache基本手工配置方法),解压fcgid,取其mod_fcgid.so至modules目录 2.打开htt ...

  2. 织梦dede解决“更新数据库archives表时出错"方法

    登陆dedecms网站管理后台,选择执行 sql命令工具,将下列命令执复制进去并执行多行执行,该问题就可以解决. alter table `idea_archives` ADD `voteid` me ...

  3. spring boot快速入门 10: 日志使用

    第一步:pom 文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  4. 创建自己的加密货币MNC——以太坊代币(二)

    创建一个基于以太坊平台的分红币MNC,根据持有的代币数量,进行分红的算法.github地址: https://github.com/lxr1907/MNC 1.使用以太坊根据比例换购token MNC ...

  5. First Android application

    In eclipse ADT : 1.创建一个新工程 File -> New -> Android Application Project 2.三个主要的文件 /src/MainActiv ...

  6. Spring框架的设计理念

    它这种设计策略完全类似于Java实现OOP的设计理念,当然Java本身的设计要比Spring复杂太多太多,但是它们都是构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定 ...

  7. HDU 1102 Constructing Roads(kruskal)

    Constructing Roads There are N villages, which are numbered from 1 to N, and you should build some r ...

  8. centOS 7下无法启动网络(service network start)错误解决办法(应该是最全的了。。。)

    今天在centOS 7下更改完静态ip后发现network服务重启不了,翻遍了网络,尝试了各种方法,终于解决了. 现把各种解决方法归纳整理,希望能让后面的同学少走点歪路... 首先看问题:执行serv ...

  9. Scrum 冲刺博客第五篇

    一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 实现题目的生成并将其显示到页面上,设置了背景音乐 今天计划完成的工作 判断 ...

  10. 基于 Annotation 的 Spring AOP 权限验证方法的实现

    1. 配置 applicationContext 在 Spring 中支持 AOP 的配置非常的简单,只需要在 Spring 配置文件 applicationContext.xml 中添加: < ...