共有体
共用体 (そのオブジェクトが配列やクラス型でない場合もありますが)メンバーの一覧で 1 種類のオブジェクトのみを含むクラス型またはユーザー定義データ。
union [tag] { member-list } [declarators];
[union] tag declarators;
パラメーター
tag
共用体に指定された型名。member-list
共用体を含めることができるデータの種類の一覧。「解説」を参照してください。declarators
共用体の名前を指定する宣言リスト。詳細については、「宣言の概要」を参照してください。
解説
共用体の メンバー リストは 共用体を含めることができるデータの種類を表します。共用体は適切なストレージが メンバー リスト で最も大きいメンバーを保持する必要があります。詳細については共用体の宣言 (C 言語リファレンス) を参照してください。
共用体の宣言
共用体の宣言を共用体のキーワードから開始しメンバー リストを中かっこで囲みます。:
// declaring_a_union.cpp
union DATATYPE // Declare union type
{
char ch;
int i;
long l;
float f;
double d;
} var1; // Optional declaration of union variable
int main()
{
}
共用体を使用する
C. では共用体はクラス型の制限付きです。これはアクセス指定子 (パブリックプロテクトプライベート)コンストラクターやデストラクターなどのデータ メンバーおよびメンバー関数を含めることができます。これは仮想関数または静的データ メンバーを含めることはできません。このコントロールは基本クラスとして使用することはできません。基本クラスを指定できます。共用体のメンバーの既定のアクセスはパブリックです。
C. の共用体型でデータ メンバーだけを含めることができます。
15 では共用体変数の宣言に 共用体 のキーワードを使用する必要があります。C++ では 共用体 のキーワードは不要です :
union DATATYPE var2; // C declaration of a union variable
DATATYPE var3; // C++ declaration of a union variable
共用体型の変数は共用体で宣言された型の値 1 を保持できます。共用体のメンバーにアクセスするにはメンバー選択演算子 ()。 の使用 :
var1.i = 6; // Use variable as integer
var2.d = 5.327; // Use variable as double
中かっこで囲まれた式を使用すると同じステートメントの共用体を宣言して初期化できます。式は共用体のフィールドの最初に評価され割り当てられます。
使用例
// using_a_union.cpp
#include <stdio.h>
union NumericType
{
int iValue;
long lValue;
double dValue;
};
int main()
{
union NumericType Values = { 10 }; // iValue = 10
printf_s("%d\n", Values.iValue);
Values.dValue = 3.1416;
printf_s("%f\n", Values.dValue);
}
出力
10
3.141600
NumericType の共用体はメモリで次の図に示すように(概念的に配置されます)。
NumericType の共用体のデータの格納