首页 > 代码库 > 【ThinkingInC++】37、更安全的union可以封装在一个类中

【ThinkingInC++】37、更安全的union可以封装在一个类中

/**
* 书本:【ThinkingInC++】
* 功能:更安全的union可以封装在一个类中
* 时间:2014年9月6日14:53:04
* 作者:cutter_point
*/

#include<iostream>

using namespace std;

class SuperVar
{
    //enum没有类型名(他是一个没有加标记的枚举),如果想立即定义enum的实例时,
    //这种做法是可取的
    enum {character, integer, floating_point}vartype;
    union
    {
        char c;
        int i;
        float f;
    };
public:
    SuperVar(char ch);
    SuperVar(int ii);
    SuperVar(float ff); //重载
    void print();
};

/*
SuperVar(char ch);
SuperVar(int ii);
SuperVar(float ff); //重载
void print();
*/

//SuperVar(char ch);
SuperVar::SuperVar(char ch)
{
    vartype=character;
    c=ch;
}

//SuperVar(int ii);
SuperVar::SuperVar(int ii)
{
    vartype=integer;
    i=ii;
}

//SuperVar(float ff); //重载
SuperVar::SuperVar(float ff)
{
    vartype=floating_point;
    f=ff;
}

//void print();
void SuperVar::print()
{
    switch(vartype)
    {
    case character:
        cout<<"character: "<<c<<endl;
        break;
    case integer:
        cout<<"integer: "<<i<<endl;
        break;
    case floating_point:
        cout<<"float: "<<f<<endl;
        break;
    }
}

int main()
{
    SuperVar A('c'), B(12), C(1.44f);
    A.print();
    B.print();
    C.print();

    return 0;
}


【ThinkingInC++】37、更安全的union可以封装在一个类中