联合体(C++)

联合体结构

union 联合体名称{

           公有成员

       protected:

            保护型成员

       private:

            私有成员

};

特点:

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

按照最多字节数的成员分配空间

无名联合

例:

union{

    int i;

    float f;

}

如果i=10(给i赋值)

紧接着又 f=2.2(给f赋值)

i 的值会被冲掉

实例:不同课程用不同的计分模式

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;

class ExamInfo{
private:
    string name;
    enum{
        GRADE,
        PASS,
        PECENTAGE
    }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),grade(grade){}
    ExamInfo(string name,int percent)
        :name(name),mode(PECENTAGE),grade(grade){}
    void show();
};
void ExamInfo::show(){
    cout << name<<":";
    switch(mode){
    case GRADE:cout<<grade; 
        break;
    case PASS:cout<<(pass ? "pass":"fail");
        break;
    case PECENTAGE:
        cout<<percent;
        break;
    }
    cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
    ExamInfo course1("English",'B');
    ExamInfo course2("Calculus",true);
    ExamInfo course3("C++ Programming",89);
    course1.show();
    course2.show();
    course3.show();
    system("pause");
    return 0;
}
运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值