Casting di C++ ( dan OOP language lain)

casting wejick

Hai sekarang mari kita belajar tentang casting, saya akan membahas konsep casting di paradigma OOP. Sebenarnya casting di OOP tidak jauh beda dengan di structural tetapi ada beberapa jenis casting tambahan.

Casting atau typecasting adalah Converting an expression of a given type into another type is known as type-casting. Dalam bahasa C++ dikenal beberapa jenis casting, antara lain :

  1. Explicit Conversion
  2. Dynamic Cast
  3. Static Cast
  4. Reinterpret Cast
  5. Cons Cast

Lalu juga disediakan tool untuk mengetahui type data dari suatu ekspresi dengan fungsi : type_id().

Mari kita bahas satu persatu.

1. Explicit Conversion

Ini jenis casting yang biasa digunakan di bahasa statically type pada umumnya. Contoh :

int a = 2;
 float b = (float) a;

Jangan menggunakan casting untuk objek (OOP) karena dapat mengakibatkan runtime error atau hasil operasi tidak beres, compiler tidak akan menganggap ini sebagai kesalahan (Compile error).

2. Dynamic Cast

Casting yang satu ini khusus untuk OOP, pada dynamic_cast casting akan tidak akan dilakukan bila tidak valid sehingga menghasilkan nilai null. Dynamic_cast berguna untuk mengubah bentuk objek ke objek lain yang memiliki basis yang sama.

Contohnya kita punya dua kelas di mana kelas base adalah basis dari kelas child .

Class base {
 public:
 int a;
 }
Class child : public base {
 public:
 int c;
 }
int main()
 {
 base *a = new base();
 base *b = new child();
 base *c;
 child *d;
 c = dynamic_cast<*base>(b);   // [1] ok : child to base
 b = dynamic_cast<*child>(a);  // [2] no : base to child - compile time error
 d = dynamic_cast<*child>(a);  // [3] no : base to child - runtime result null
 }

Pada code di atas terdapat 3 penggunaan dynamic_cast, berikut pembahasannya :

[1] Hanya casting dari objek turunan ke objek base yang diperbolehkan.

[2] Pada kasus casting dari objek base ke objek turunan maka akan menghasilkan error pada saat code di compile.

[3] Sedangkan bila casting dari objek base ke objek turunan dilakukan dengan kondisi objek tujuan adalah polimorfis (hanya homomorphism) maka kesalahan ada di runtime, dynamic_cast akan menghasilkan nilai null.

3. Static Cast

Hampir sama dengan dynamic_cast (2) hanya saja memungkinkan kita untuk mengkonversi dari base class ke child class.

4. Reinterpret Cast

Memungkin untuk melakukan konversi dari pointer jenis apapun ke pointer jenis apapun, jadi anda dapat mengkonversi type atau objek apapun. Hasil konversinya berupa low level, artinya seperti mengkopi isi binarynya.

contoh : kita menggunakan class yang sama seperti contoh 2.

base *a;
child *b;
 int *a = reinterpret_cast<*int>(a);

Kok kelihatannya kacau gitu yah? ndak kok, ini berguna untuk kasus seperti ini :

void *c;
a = reinterpret_cast<void*>(c);

ehingga dapat anda gunakan sebagai parameter sebuah thread.

5. Const Cast

Digunakan untuk mengubah suatu variable menjadi constan ataupun sebaliknya (toggle)

Lebih lanjut dapat dilihat di sini :

http://www.cplusplus.com/doc/tutorial/typecasting/

http://www.tutorialspoint.com/cplusplus/cpp_casting_operators.htm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s