C++类(2)

一、类的实例化

用类的类型创建对象的过程被称为类的实例化。

  1. 类是对对象进行描述的,仅仅是限定了类中包含哪些成员,定义的类并没有分配实际的空间来存储它
  2. 一个类可以实例化出多个对象,实例化出的对象是占用实际的物理空间的
class Date //类的声明,没有分配实际的空间进行存储
{
public:
    int _year;
    int _month;
    int _day;
};

int main()
{
    Date d;  //类的实例化,分配空间进行存储
    return 0;
}

二、类对象的存储

一个类中,存在着成员变量和成员函数,每个对象中成员变量是不同的,但会调用同一份函数,若每个对象中都会保存一份代码,相同的代码会保存多次,造成空间的浪费,因此我们只需要保存类中不同的部分,将相同的部分放在公共的代码段就可以避免空间的浪费。

class Date
{
public:
	void Print()
	{
		cout << "hello" << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
class Date1
{
	int _year;
	int _month;
	int _day;
}; 
class Date2
{
public:
	void Print()
	{
		cout << "hello" << endl;
	}
};
class Date3
{
};
int main()
{
	cout << "Date: " << sizeof(Date) << endl;  //包含函数和变量
	cout << "Date1: " << sizeof(Date1) << endl;//只包含变量
	cout << "Date2: " << sizeof(Date2) << endl;//只包含函数
	cout << "Date3: " << sizeof(Date3) << endl;//空类
	return 0;
}

代码运行结果:

我们可以发现,Date和Date1所占用的空间大小是一样的,而Date2占用的空间是1,因此我们可以断定函数存放在公共区域,而类的大小是成员变量之和,并且类和结构体一样都有内存对齐

Date2和Date3为1,是因为编译器给了空类一个字节来标识这个类的对象,只包含函数的类与空类所占用的空间相同。

内存对齐:

  1. 第一个成员在偏移量为0的地址处
  2. 其他成员变量要对齐到对齐数的整数倍的地址处(对齐数 = 编译器默认的一个对齐数或该成员大小的较小值)VS默认的对齐数是8
  3. 结构体大小是最大对齐数(所有变量类型的最大者与默认对齐数参数取最小)的整数倍
  4. 若嵌套了其他类,嵌套的类对齐到自己的最大对齐数的整数倍,类的整体大小就是所有最大对齐数(含嵌套类的对齐数)的整数倍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值