#include "D:\C++WORK\main.h"
//教材664页面上的union判别式的实现
class Token
{
public:
enum TokenKind {INT,CHAR,DBL};
TokenKind tok;
union
{
char cval;
int ival;
double dval;
}val;
};
class Token1
{
public:
enum TokenKind {INT,CHAR,DBL};
TokenKind tok;
union
{
char cval;
int ival;
double dval;
};
};
int main()
{
Token token;
token.tok=Token::INT;
token.val.cval='c';
/*这里我们可以看到token的成员有;(1)TokenKind类型的变量tok(2)一个union类型的变量val;
一个val变量中有三种变量:cval,ival,dval。
*/
switch (token.tok)
{
case Token::INT:
token.val.ival=42;
break;
case Token::CHAR:
token.val.cval='a';
break;
case Token::DBL:
token.val.dval=3.14;
break;
}
cout<<token.val.ival<<endl;
//
//
Token1 token1;
token1.tok=Token1::INT;
token1.cval='c';
/*我们可以看到token1的成员有token1.cval;token1.dval;token1.ival;token1.tok;*/
//所以我们可以看到 【匿名union的成员的名字出现在外围作用域中。】
//【因为匿名union不提供访问其他的成员的途径,所以将成员作为定义匿名union的作用域的一部分直接访问】
//所以下面的判别式的访问成员的方式不一样了:token1.ival=42;
switch (token1.tok)
{
case Token1::INT:
token1.ival=42;
break;
case Token::CHAR:
token1.cval='a';
break;
case Token::DBL:
token1.dval=3.14;
break;
}
cout<<token1.ival<<endl;
return 0;
}