• 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:ComputerTechVS2015Release>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:ComputerTechVS2015Release>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:ComputerTechVS2015Release>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:ComputerTechVS2015Release>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:ComputerTechVS2015Release>Test.exe
    sizeof(CBase)=4
    sizeof(CDerive)=16
    sizeof(p)=48
    &p[0]=0041FE38
    &p[1]=0041FE48
    &p[2]=0041FE58
    

    总结:
    当类中含有变量时,类的大小就像普通的结构体那样去计算,大小为地址对齐后的所有变量的总的大小;当类中不含任何变量时,类的大小并非为0,而是为1个字节(如(i)所示)。

  • 相关阅读:
    github-git clone 下载很慢的问题解决
    java-springCloud环境配置
    github-上传自己的项目到github仓库
    java-项目中无法访问js、css等静态资源
    java-新建简单的Web项目
    Echarts中axislabel文字过长导致显示不全或重叠
    JS设置cookie,读取cookie,删除cookie
    整理base.css,重设浏览器样式
    IE6中png背景图片透明的最好处理方法
    PHP的报错级别并返回当前级别error_reporting()
  • 原文地址:https://www.cnblogs.com/dongling/p/5864464.html
Copyright © 2020-2023  润新知