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

これでどこに向かいたいのかわかりません。共用体は、任意の時点でメンバーのリストから 1 つのオブジェクトのみを含む、ユーザー定義のデータ型またはクラス型です。したがって、このように定義された共用体がある場合は、これから始めます。

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 に答える