【发布时间】:2009-11-24 21:37:26
【问题描述】:
我需要有多个联合实例作为类变量,那么如何在堆中创建联合实例?谢谢
【问题讨论】:
-
实例变量还是类变量?联合还是联合指针?
我需要有多个联合实例作为类变量,那么如何在堆中创建联合实例?谢谢
【问题讨论】:
与创建任何其他对象相同:
union MyUnion
{
unsigned char charValue[5];
unsigned int intValue;
};
MyUnion *myUnion = new MyUnion;
你的联合现在在堆上。请注意,联合是其最大数据成员的大小。
【讨论】:
我的 C++ 有点生疏了,但是:
my_union_type *my_union = new my_union_type;
...
delete my_union;
【讨论】:
使用new 运算符。
【讨论】:
我不确定你想用这个去哪里。联合是一种用户定义的数据或类类型,在任何给定时间,它只包含其成员列表中的一个对象。所以从这里开始,如果你有一个这样定义的联合:
union DataType
{
char ch;
integer i;
float f;
double d;
};
然后您可以使用DataType 作为类型来定义类中的成员或作为类型来定义堆栈上的变量,就像您定义的常规类型、结构或类一样。
【讨论】:
使用new 运算符:
#include <iostream>
union u {
int a;
char b;
float c;
};
class c {
public:
c() { u1 = new u; u2 = new u; u3 = new u; }
~c() { delete u1; delete u2; delete u3; }
u *u1;
u *u2;
u *u3;
};
int main()
{
c *p = new c;
p->u1->a = 1;
p->u2->b = '0' + 2;
p->u3->c = 3.3;
std::cout << p->u1->a << '\n'
<< p->u2->b << '\n'
<< p->u3->c << std::endl;
delete c;
return 0;
}
【讨论】:
与结构相同 :) 您可以使用 malloc() 并以 C 方式执行,或 new 以 C++ 方式执行。秘密在于结构、联合和类是相关的;结构只是一个没有方法的类(通常)。如果您关心,以下 cmets 中有更多说明。
【讨论】: