gravatar

User defined data types

User defined data types

Definition of own types (typedef).

C++ memungkinkan kita untuk mendefinisikan tipe berdasarkan tipe data yang sudah ada. Untuk itu digunakan keyword typedef, dengan format :

typedef existing_type new_type_name ;

dimana existing_type adalah tipe data dasar pada C++ dan new_type_name adalah nama dari tipe baru yang didefinisikan. Contoh :

typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef char field [50];

Contoh diatas telah mendefinisikan empat tipe data baru : C, WORD, string_t dan field sebagai char, unsigned int, char* dan char[50] yang akan digunakan nanti seperti berikut :

C achar, anotherchar, *ptchar1;
WORD myword;
string_t ptchar2;
field name;

Union

Union memungkinkan bagian dari memory dapat diakses sebagai tipe data yang berbeda, walaupun pada dasarnya mereka berada pada lokasi yang sama di memory. Pendeklarasian dan penggunaanya hampir sama dengan struktur tetapi secara fungsional berbeda :

union model_name {

type1 element1;

type2 element2;

type3 element3;

.

.

} object_name;

Semua elemen pada deklarasi union declaration menempati tempat yang sama dimemory. Ukuran yang digunakan diambil dari tipe yang paling besar. Contoh :

union mytypes_t {

char c;

int i;

float f;

} mytypes;

Mendefinisikan tiga elemen :

mytypes.c
mytypes.i
mytypes.f

Tiap data memiliki tipe yang berbeda, karena menempati lokasi yang sama dmemory, maka perubahan terhadap satu elemen akan mempengaruhi elemen yang lain.

Salah satu kegunaan union, memungkinkan untuk menggabungkan tipe dasar dengan suatu array atau struktur dari elemen yang lebih kecil. Contoh :

union mix_t{

long l;

struct {

short hi;

short lo;

} s;

char c[4];

} mix;

Mendefinisikan tiga nama yang memungkinkan kita untuk mengakses grup 4 bytes yang sama : mix.l, mix.s dan mix.c dan dapat digunakan menutut bagaimana kita akan mengaksesnya, sebagai long, short atau char. Tipe data yang sudah digabungkan, arrays dan structures dalam suatu union, maka dibawah ini merupakan cara pengakses-an yang berbeda :

Anonymous unions



Pada C++ terdapat option unions tanpa nama (anonymous union). Jika disertakan union dalam structure tanpa nama objek(yang dituliskan setelah kurung kurawal { }) maka union akan tidak memiliki nama dan kita dapat mengakses elemennya secara langsung dengan namanya. Contoh:



union

struct {

char title[50];

char author[50];

union {

float dollars;

int yens;

} price;

} book;

anonymous union

struct {

char title[50];

char author[50];

union {

float dollars;

int yens;

};

} book;



Perbedaan deklarasi diatas adalah program pertama diberi nama pada union (price) dan yang kedua tidak. Pada saat mengakses anggota dollars dan yens dari objek. Pada program pertama :

book.price.dollars
book.price.yens

Sedangkan untuk program kedua :

book.dollars
book.yens