C++语法问题之---联合类型的构造函数是怎么写的?

ironson 2009-01-09 09:48:27
比如我有一个类定义如下:

class Token
{
int tokenType;
enum
{
int ival;
double dval;
}
};

如果我经常使用一个 tokenType 为 0,ival 为 0 的 Token, 我就希望像 cin,cout 那样定义一次了
以后可以方便地使用,那么该怎么写呢?
是:
[code=C/C++]
Token ZERO_TOKEN( 0, 0, 0.0 );
[code = C/C++]
呢?
还是:
[code=C/C++]
Token ZERO_TOKEN( 0, 0 );
[code = C/C++]
呢?
...全文
216 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2009-01-09
  • 打赏
  • 举报
回复

struct Token
{
int tokenType;
union
{
int ival;
double dval;
};
};

Token ZERO_TOKEN = {0, 0};
ironson 2009-01-09
  • 打赏
  • 举报
回复
哦,写错了。
非常感谢大家的讨论。
也就是说,可以自己定义构造函数来初始化,
如果不定义的话就很难办了,在一个类中只有一个联合的时候还可以大胆地猜测
默认构造函数初始化联合中的第一个成员,但是如果有多个联合,那就很玄了。
再次感谢大家!
tianjiao85 2009-01-09
  • 打赏
  • 举报
回复
很少看到C++中用联合,
不懂。
lann64 2009-01-09
  • 打赏
  • 举报
回复
联合union的构造函数跟类的构造函数写法是一样的。
比如
union test
{
public:
test():i(0){}
test(int ii):i(ii){}
private:
int i;
char c;
};

楼主的例子里,只有枚举,没有联合。就算把枚举换成union,也是个类内嵌套的无名union,
这种情况只需要在类构造函数初始化时顺带处理一下就行了。
baihacker 2009-01-09
  • 打赏
  • 举报
回复
联合可以有成员函数,但却不能有静态成员.
一般说来编译器无法知道被使用的是哪个成员;也就是说,无法知道存储在联合中的对象的对象的类型.因此,联合就不能包含带构造函数或析构函数的成员,因为无法保护其中的对象以防止破坏,也不可能保证在联合离开作用域时能调用正确的析构函数.

楼的的情况只要一个静态成员就OK了.
xiaoyisnail 2009-01-09
  • 打赏
  • 举报
回复

class Token
{
public:
enum TokenType {INT, DOUBLE};
TokenType tokenT;
union
{
int ival;
double dval;
} tokenVal;
public:
Token(TokenType t, double d):tokenT(t)
{
switch(t)
{
case TokenType::INT:
tokenVal.ival = int(d);
break;
case TokenType::DOUBLE:
tokenVal.dval = d;
break;
}
}
};

Token ZERO_TOKEN(Token::TokenType::INT, 0);
sincor 2009-01-09
  • 打赏
  • 举报
回复
联合体是C语言的问题
xbwee 2009-01-09
  • 打赏
  • 举报
回复
你要的是union 联合而不是enum 枚举
若是union则第二种方法初始化。
因为联合类型是同一块内存地址可以用来存放不同的类型变量,当然同一时间只存在其中的一个类型变量。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧