4

我需要有几个联合实例作为类变量,那么如何在堆中创建联合实例?谢谢你

4

6 回答 6

8

与创建任何其他对象相同:

union MyUnion
{
   unsigned char charValue[5];
   unsigned int  intValue;
};


MyUnion *myUnion = new MyUnion;

你的工会现在在堆上。请注意,联合是其最大数据成员的大小。

于 2009-11-24T21:44:16.403 回答
2

我的 C++ 有点生疏,但是:

   my_union_type *my_union = new my_union_type;
   ...
   delete my_union;
于 2009-11-24T21:44:09.727 回答
0

使用new运算符。

于 2009-11-24T21:41:40.813 回答
0

与结构相同 :) 您可以使用malloc()C 方式或newC++ 方式使用和执行它。秘密在于结构、联合和类是相关的;结构只是一个没有方法的类(通常)。如果您关心,以下评论中有更多说明。

于 2009-11-24T21:41:55.353 回答
0

我不确定你想去哪里。联合是一种用户定义的数据或类类型,在任何给定时间,它只包含其成员列表中的一个对象。所以从这里开始,如果你有一个这样定义的联合:

union DataType
{
    char ch;
    integer i;
    float f;
    double d;
};

然后,您可以将其DataType用作类型来定义类中的成员或用作类型来定义堆栈上的变量,就像您定义的常规类型、结构或类一样。

于 2009-11-24T21:45:23.927 回答
0

使用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;
}
于 2009-11-24T21:46:47.707 回答