Union
Declares a union user defined type.
typename
Unions are similar to a Type structure, except that the elements of a union occupy the same space in memory.
Like Type, Union can use the optional Field = number specifier and supports also inheritance through the use of the Extends keyword.
Unlike Type, Union can not contain variable-length strings, and more generally fields (or can not have bases) with constructors or destructors.
The size of the Union is the size of the largest data item. A data item can be an unnamed Type. Since they occupy the same space, only a single element can be used.
Unions support member functions including Constructor, Destructor, Function, Operator, Property and Sub. All members of a union are public and access control is not supported.
Nested unnamed type or union cannot have procedure members or static data members (same restriction for local named type/union).
A Union can be passed as a user defined type to overloaded operator functions.
Syntax
Parameters
typename
Name of the Union
fieldnameName of a data field member
member function declarationAny of the supported member functions
Description
Unions are similar to a Type structure, except that the elements of a union occupy the same space in memory.
Like Type, Union can use the optional Field = number specifier and supports also inheritance through the use of the Extends keyword.
Unlike Type, Union can not contain variable-length strings, and more generally fields (or can not have bases) with constructors or destructors.
The size of the Union is the size of the largest data item. A data item can be an unnamed Type. Since they occupy the same space, only a single element can be used.
Unions support member functions including Constructor, Destructor, Function, Operator, Property and Sub. All members of a union are public and access control is not supported.
Nested unnamed type or union cannot have procedure members or static data members (same restriction for local named type/union).
A Union can be passed as a user defined type to overloaded operator functions.
Example
' Example 1: bitfields.
Type unitType
Union
Dim attributeMask As UInteger
Type ' 32-bit uintegers can support up to 32 attributes.
isMilitary : 1 As UInteger
isMerchant : 1 As UInteger
End Type
End Union
End Type
Dim myunit As unitType
myunit.isMilitary = 1
myunit.isMerchant = 1
Print myunit.isMilitary ' Result: 1.
Print myunit.isMerchant ' Result: 1.
Print myunit.attributeMask ' Result: 3.
Sleep
' Example 2.
' Define our union.
Union AUnion
a As UByte
b As Integer
End Union
' Define a composite type.
Type CompType
s As String * 20
ui As Byte 'Flag to tell us what to use in union.
Union
au As UByte
bu As Integer
End Union
End Type
' Flags to let us know what to use in union.
' You can only use a single element of a union.
Const IsInteger = 1
Const IsUByte = 2
Dim MyUnion As AUnion
Dim MyComposite As CompType
' Can only set one value in union.
MyUnion.a = 128
MyComposite.s = "Type + Union"
MyComposite.ui = IsInteger ' Tells us this is an integer union.
MyComposite.bu = 1500
Print "Union: ";MyUnion.a
Print "Composite: ";
If MyComposite.ui = IsInteger Then
Print MyComposite.bu
ElseIf MyComposite.ui = IsUByte Then
Print MyComposite.au
Else
Print "Unknown type."
End If
Sleep
Type unitType
Union
Dim attributeMask As UInteger
Type ' 32-bit uintegers can support up to 32 attributes.
isMilitary : 1 As UInteger
isMerchant : 1 As UInteger
End Type
End Union
End Type
Dim myunit As unitType
myunit.isMilitary = 1
myunit.isMerchant = 1
Print myunit.isMilitary ' Result: 1.
Print myunit.isMerchant ' Result: 1.
Print myunit.attributeMask ' Result: 3.
Sleep
' Example 2.
' Define our union.
Union AUnion
a As UByte
b As Integer
End Union
' Define a composite type.
Type CompType
s As String * 20
ui As Byte 'Flag to tell us what to use in union.
Union
au As UByte
bu As Integer
End Union
End Type
' Flags to let us know what to use in union.
' You can only use a single element of a union.
Const IsInteger = 1
Const IsUByte = 2
Dim MyUnion As AUnion
Dim MyComposite As CompType
' Can only set one value in union.
MyUnion.a = 128
MyComposite.s = "Type + Union"
MyComposite.ui = IsInteger ' Tells us this is an integer union.
MyComposite.bu = 1500
Print "Union: ";MyUnion.a
Print "Composite: ";
If MyComposite.ui = IsInteger Then
Print MyComposite.bu
ElseIf MyComposite.ui = IsUByte Then
Print MyComposite.au
Else
Print "Unknown type."
End If
Sleep
Dialect Differences
Differences from QB
- New to FreeBASIC
See also