一, 联合体
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, 可以指定底层类型;
来源: http://www.bubuko.com/infodetail-3415172.html