【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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值