C++ unnion

来源:互联网 发布:户口本生成器软件 编辑:程序博客网 时间:2024/06/05 20:35

摘自C++ PRIMER & C PROGRAMING:

1.缺省情况下 union 的成员都是公有成员 union 的名字可以被用在任何类名可以被使用的地方 例如:


// TokenValue类型的对象
TokenValue last_token;


// TokenValue 类型对象的指针
TokenValue *pt = new TokenValue;


2. union 的成员可以被声明为公有 私有或保护的:
union TokenValue {
public:
char _cval;
// ...
private:
int priv;
};
int main() {
TokenValue tp;
tp._cval = '\n'; // ok
// 错误: main() 不能访问私有成员 TokenValue::priv
tp.priv = 1024;
}


3.union不能有静态数据成员或是引用成员 如果一个类类型定义了构造函数 析构函数或拷贝赋值操作符 则它不能成为union 的成员类型。


4.我们可以为union 定义成员函数 包括构造函数和析构函数
union TokenValue {
public:
TokenValue(int ix) : _ival(ix) { }
TokenValue(char ch) : _cval(ch) { }
// ...
int ival() { return _ival; }
char cval() { return _cval; }
private:
int _ival;
char _cval;
// ...
};


5.在定义 union union 的名字是可选的 如果在程序中不需要用 union 的名字作为类型名去声明其他的对象 则定义union 类型时就没必要提供名字了。 
// union类型名被省略
union {
char _cval;
int _ival;
char *_sval;
double _dval;
} val;


6.匿名 union 是没有名字union 它后面也没有跟着对象定义 例如 下面的 Token类定义含有一个匿名 union
class Token {
public:
TokenKind tok;
// 匿名union
union {
char _cval;
int _ival;
char *_sval;
double _dval;
};
};

匿名union 的数据成员可以在定义匿名 union的域中被直接访问 。

0 0
原创粉丝点击