联合体的使用(c++)
2014-04-03 22:07
295 查看
1、联合体中的对象成员
c++中union不可以存储有自定义构造函数的类的对象实例,但可以存储不同类型对象的指针(指针是4字节地址)。否则不能通过编译,错误的代码如下:
class myclass
{
public:
myclass(long l):data_(l){}
int data_;
};
typedef union _tagutype_
{
testunion obj;
}ut;
把上面代码中的类型myclass中的自定义够着函数去掉。正确代码如下:
class testunion
{
public:
int data_;
};
typedef union _tagutype_
{
testunion obj;
}ut;
2、类中联合体成员的具体初始化
在类中具体初始化联合体对象时,需要联合体含有自定义的构造函数,才能在类的构造函数的初始化列表中初始化联合体成员(默认的构造函数不带参数)。否则不能通过编译。以下代码会编译出错:
class myclass
{
union
{
const char* ch_;
long l_;
} data_;
myclass(myclass&);
myclass& operator=(const myclass&);
public:
myclass(const char* ch);//构造函数
myclass(long l);//构造函数
operator const char*() const {return data_.ch_;}//操作符取值
operator long() const {return data_.l_;}//操作符取值
};
myclass::myclass(const char* ch):data_.ch_(ch){}//不能在初始化列表直接访问联合体的成员来初始化
myclass::myclass(long l):data_.l_(l){}
int main (void)
{
myclass pszobj("yuankai");
myclass lobj(1234);
return 0;
}
联合体的具体初始化需要自定义构造函数。
正确的代码如下:
class myclass
{
union dataunion //不能匿名
{
dataunion(const char*); //声明const char*构造函数
dataunion(long); //声明long构造函数
const char* ch_;
long l_;
} data_;
myclass(myclass&);
myclass& operator=(const myclass&);
public:
myclass(const char* ch);//构造函数
myclass(long l);//构造函数
operator const char*() const {return data_.ch_;}//操作符取值
operator long() const {return data_.l_;}//操作符取值
};
myclass::dataunion::dataunion(const char* ch):ch_(ch){}//联合体构造函数实现
myclass::dataunion::dataunion(long l):l_(l){}//联合体构造函数实现
myclass::myclass(const char* ch):data_(ch){}//联合体构造函数初始化data_(ch)
myclass::myclass(long l):data_(l){}//联合体构造函数初始化data_(l)
相关文章推荐
- 联合体的正确使用方式
- 联合体(union)的使用方法及其本质
- union联合体使用注意事项
- 从两道经典试题谈C/C++中联合体(union)的使用
- 联合体(union)的使用方法及其本质
- 从两道经典试题谈C/C++中联合体(union)的使用
- 联合体(union)的使用方法及其本质
- JAVA实现类似C语言联合体般 充分使用bit位存储数据的方法之一
- c语言-union联合体的使用
- 从两道经典试题谈C/C++中联合体(union)的使用
- union联合体使用详解
- 联合体(union)的使用方法及其本质
- [转]从两道经典试题谈C/C++中联合体(union)的使用
- 联合体(union)的使用方法及其本质
- 从两道经典试题谈C/C++中联合体(union)的使用
- 经典试题C/C++中联合体(union)的使用
- 从两道经典试题谈C/C++中联合体(union)的使用
- 联合体(union)的使用方法及其本质
- epoll中的data联合体怎样使用的问题
- C语言使用联合体和位域让编译器进行位操作