【问题标题】:How to dynamically create a union instance in c++?如何在 C++ 中动态创建联合实例?
【发布时间】:2009-11-24 21:37:26
【问题描述】:

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

【问题讨论】:

  • 实例变量还是类变量?联合还是联合指针?

标签: c++ instance unions


【解决方案1】:

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

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


MyUnion *myUnion = new MyUnion;

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

【讨论】:

    【解决方案2】:

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

       my_union_type *my_union = new my_union_type;
       ...
       delete my_union;
    

    【讨论】:

      【解决方案3】:

      使用new 运算符。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          使用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;
          }
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • C++ 中的结构可能有方法。结构和类非常相似,只是结构默认具有公共成员/函数,而类默认具有私有成员。
            • 不,你可以在结构中拥有方法。您甚至可以从类派生结构,反之亦然。 struct 和 class 之间的唯一区别在于,struct 的默认访问权限是 public,而 class 的默认访问权限是 private。
            • 在 C++ 中,结构可以有方法。结构和类的主要区别在于,类的默认访问权限是私有的,而结构的默认访问权限是公共的。
            • 好吧好吧,你现在可以停止抨击我了。
            • 你可能会觉得这个问题很有趣:stackoverflow.com/questions/654609/…
            猜你喜欢
            • 2020-05-11
            • 2013-02-10
            • 1970-01-01
            • 1970-01-01
            • 2018-09-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多