一、 联合体
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)