C++位域

位域的声明形式

 数据类型说明符   成员名 : 位数;

位域的作用 通过“打包”,使类的不同成员共享相同的字节,从而节省存储空间。

注意事项 具体的打包方式,因编译器而异;

只有bool、char、int和枚举类型的成员,允许定义为位域;

节省空间,但可能增加时间开销。

例:设计一个结构体存储学生的成绩信息,需要包括学号、年级和成绩三项内容,学号的范围是0到99,999,999,年级分为freshman、sophomore、junior、senior四种,成绩包括A、B、C、D四个等级。

#include <iostream>
using namespace std;

enum Level { FRESHMAN, SOPHOMORE, JUNIOR, SENIOR };
enum Grade { A, B, C, D };
class Student {
public:
	Student(unsigned number, Level level, Grade grade)
		: number(number), level(level), grade(grade) { }
	void show();
private:
	unsigned number : 27;
	Level level : 2;
	Grade grade : 2;
};
void Student::show() {
	cout << "Number:    " << number << endl;
	cout << "Level:     ";
	switch (level) {
		case FRESHMAN:  cout << "freshman"; break;
		case SOPHOMORE: cout << "sophomore"; break;
		case JUNIOR:    cout << "junior"; break;
		case SENIOR:    cout << "senior"; break;
	}
	cout << endl;
	cout << "Grade:     ";
	switch (grade) {
		case A: cout << "A"; break;
		case B: cout << "B"; break;
		case C: cout << "C"; break;
		case D: cout << "D"; break;
	}
	cout << endl;
}

int main() {
	Student s(12345678, SOPHOMORE, B);
	cout << "Size of Student: " << sizeof(Student) << endl;
	s.show();
	return 0;
}

运行结果:(运行结果第一行会因编译环境的不同而有所差异)

Size of Student: 4

Number:    12345678

Level:     sophomore

Grade:     B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值