您现在的位置: 天极网 > 开发频道 > C++中union的应用剖析
全文

C++中union的应用剖析

2001-11-21 08:11作者:袁小凯出处:yesky责任编辑:方舟

  真是不幸,编译都通不过,好象没有什么问题呀,为什么呢?data_.ch_(ch)和data_.l_(l)有问题吗?如果你问一个C程序员他会告诉你,绝对没问题。你不会去怀疑编译器有问题吧!不好意思!我一开始就是这么想的,真是惭愧。费解,迷惑。让我们来看看构造TestUnion对象时发生了什么,这样你就会明白了。当创建TestUnion对象时,自然要调用其相应的构造函数,在构造函数中当然要调用其成员的构造函数,所以其要去调用union成员的构造函数,但是其为匿名的,有没有构造函数可调用,所以出错。很明显在C++中union和class一样它可以有构造函数,不能如此直接引用其成员。struct同样有这限制。只要我们给其定义一个构造函数什么问题都解决了。示例如下:

class TestUnion
{
enum StoreType{Long,Const_CharP};
union DataUnion //不能匿名
{
DataUnion(const char*); //声明const char*构造函数
DataUnion(long); //声明long构造函数
const char* ch_;
long l_;
} data_;
StoreType stype_;
TestUnion(TestUnion&);
TestUnion& operator=(const TestUnion&);
public:
TestUnion(const char* ch);
TestUnion(long l);
operator const char*() const {return data_.ch_;}
operator long() const {return data_.l_;}
};

TestUnion::TestUnion(const char* ch):data_(ch),stype_(Const_CharP)
{//注意data_(ch),这里直接引用data_
}

TestUnion::TestUnion(long l):data_(l),stype_(Long)
{//注意data_(l),这里直接引用data_
}

TestUnion::DataUnion::DataUnion(const char* ch):ch_(ch)
{
}

TestUnion::DataUnion::DataUnion(long l):l_(l)
{
}

  现在再编译,如果还不行,你怀疑编译器有问题是有理由的。好了就写这么多吧!希望对大家有帮助,我可是花了一个下午的时间呀!如果有什么错误,希望来信指出,很希望和大家共同探讨C++,共同进步(ccplusplus@21cn.com)。


共3页。 9 7 1 2 3

软件资讯·软件下载尽在天极软件

共3页。 首页 上一页 1 2 3
相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众