github上的每日学习 13

一、 联合体

C语言没有学习到的。

Union 联合体名称{
公有成员
Protected:
保护型成员
Private:
私有成员
};

这些成员不是同时存在的,意思是任何两个成员不会同时有效。

例子:

Union Mark{//成绩的联合体
	Char grade;//等级制
	Bool pass;//是否通过
	Int percent;//百分制
}

首先,这个联合体取成员中占字节最大的那个成员为自己的字节数,如此例子中,这个联合体的字节数为四。
只能存入grade pass percent 这三个成员中的一个。
如果已经存入pass又要存有percent时,pass这个成员会消失。
也有无名联合体。

Union{
Int i;
Float f;
};

二、 联合体练习

#include<iostream>
#include<string>
using namespace  std;
class ExamInfo {
private :
	string name;//课程名称
	enum{GRADE,PASS,PERCENT} 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(PERCENT), percent(percent){}
	void show();

};
void ExamInfo::show()
{
	cout << name << ":";
	switch (mode) {
	case GRADE:cout << grade; break;
	case PASS:cout << (pass ? "pass" : "fail"); break;
	case PERCENT: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;
}

三、 枚举类

这和C语言中不一样。

语法形式

enum class 枚举类型名:底层类型{枚举值列表//int类型};

具体练习:

enum class type{General=1,Light,Heavy}; 
enum class type:char {General,Light,Heavy};
```
####它的优势:
####1、	强作用域;
####2、	转换限制;
####3、	可以指定底层类型;

![](https://img2018.cnblogs.com/blog/1925081/202002/1925081-20200209194839800-2080661157.png)
原文地址:https://www.cnblogs.com/zouzou-1/p/12288445.html