第一课:类或对象所占空间

2-1、2-2类和对象所占空间大小

#include<iostream>

using namespace std;

// 空类所占空间大小
class A
{

};

// 对象里只有一个普通的char型成员变量 
class B
{
    char ch;
};

// 对象里只有一个普通的char型和一个普通的int型成员变量 
class C
{
    char ch;
    int num;
};

// 静态成员变量
class D
{
    static int i;
};

// 针对的是普通成员函数
class E
{
    void func()
    {

    }
};

// 针对的是静态成员函数
class F
{
    void func()
    {

    }
};

// 针对的是虚函数
class G
{
    virtual void func()          // 虚函数
    {

    }
};
class H:public G
{
    void func()
    {

    }
};

int main(void)
{
    /************************** 一、 针对的是成员变量 ******************************/
    cout << "针对的是成员变量" << endl;
    /************************** 1-1 针对的是普通成员变量 ******************************/
    /****************** 1-1-1 空类 、空对象 所占空间大小 *******************/
    A a;
    cout << sizeof(a) << endl;        // 空对象   1个字节
    cout << sizeof(A) << endl;        // 空类     1个字节


    /****************** 1-1-2 对象里只有一个普通的char型成员变量 所占空间大小 *******************/
    cout << sizeof(B) << endl;            // 1个字节

    /****************** 1-1-3 对象里只有一个普通的char型和一个普通int型成员变量 所占空间大小 *******************/
    cout << sizeof(C) << endl;            // 8个字节 存在字节对齐问题。与C语言中的struct一样字节对齐问题

    /************************** 1-2 针对的是静态成员变量 ******************************/
    cout << sizeof(D) << endl;           // 静态成员变量不占空间


    /************************** 二、 针对的是成员函数 ******************************/
    cout << "针对的是成员函数" << endl;
    /************************** 2-1 针对的是普通成员函数 ******************************/
    cout << sizeof(E) << endl;          // 普通成员函数不占空间

    /************************** 2-2 针对的是静态成员函数 ******************************/
    cout << sizeof(F) << endl;          // 静态成员函数不占空间

    /************************** 2-3 针对的是虚函数 ******************************/
    cout << sizeof(G) << endl;          // 4个字节
    cout << sizeof(H) << endl;          // 4个字节
    //虚函数有一个虚函数指针vptr,指向虚函数表。(x86)指针占4个字节。

    return 0;
}

结论:
1)空的类或对象占用一个字节(成员函数不占内存(虚函数除外))
2)静态成员变量或静态成员函数不占内存
3)虚函数会生成一个虚指针指向虚函数表。指针占4个字节(X86)
注意:成员变量存在字节对齐现象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值