追学网

4.9-2 联合体

UPDATE:2015/10/17 | 分类:C++语言视频教程



【联合体】

【声明形式】

union 联合体名称 {
    公有成员
protected:
    保护型成员
private:
    私有成员
};

【特点】

  • 成员共用同一组内存单元
  • 任何两个成员不会同时有效

【联合体的内存分配】

  • 举例说明:
union Mark {	//表示成绩的联合体
	char grade;	//等级制的成绩
	bool pass;	//只记是否通过课程的成绩
	int percent;	//百分制的成绩
};

【特点】

union {
  int i;
  float f;
}
在程序中可以这样使用:
i = 10;
f = 2.2;

下面我们看一个联合体的例题

【例4-8使用联合体保存成绩信息,并且输出。】

#include 
#include 
using namespace std;
class ExamInfo {
private:
	string name;	//课程名称
	enum { GRADE, PASS, PERCENTAGE } mode;//计分方式
	union {
		char grade;	//等级制的成绩
		bool pass;	//只记是否通过课程的成绩
		int percent;	//百分制的成绩
	};
public:
	//三种构造函数,分别用等级、是否通过和百分初始化
	ExamInfo(string name, char grade)
		: name(name), mode(GRADE), grade(grade) { }
	ExamInfo(string name, bool pass)
		: name(name), mode(PASS), pass(pass) { }
	ExamInfo(string name, int percent)
		: name(name), mode(PERCENTAGE), percent(percent) { }
	void show();
}

void ExamInfo::show() {
	cout << name << ": ";
	switch (mode) {
	  case GRADE: cout << grade;  break;
	  case PASS: cout << (pass ? "PASS" : "FAIL"); break;
	  case PERCENTAGE: cout << percent; break;
	}
	cout << endl;
}

int main() {
	ExamInfo course1("English", 'B');
	ExamInfo course2("Calculus", true);
	ExamInfo course3("C++ Programming", 85);
	course1.show();
	course2.show();
	course3.show();
	return 0;
}
运行结果:
English: B
Calculus: PASS
C++ Programming: 85
学习网

世界看中国 娱乐情感文化观点视频