C++学习笔记(8)----C++类的大小

本文通过实例演示了C++中不同类型的类(含成员变量与不含成员变量)的大小计算方式,展示了地址对齐和成员变量如何影响类的大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)所示)。

转载于:https://www.cnblogs.com/dongling/p/5864464.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值