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、 可以指定底层类型;

猜你喜欢

转载自www.cnblogs.com/zouzou-1/p/12288445.html
今日推荐