Cara Mengonversi Tipe Data di C++

Cara Mengonversi Tipe Data Di C



Proses mengubah tipe data dari satu variabel ke variabel lain dikenal sebagai konversi tipe atau casting tipe dalam C++. Hal ini dilakukan untuk melakukan operasi matematika pada variabel bertipe data berbeda, dengan membuat tipe datanya kompatibel satu sama lain. Konversi jenis mengoptimalkan kode. Misalnya saat menghitung selisih dua variabel, jika salah satu bilangan bertipe float dan bilangan lainnya bertipe data integer, maka tipe data integer akan diubah menjadi tipe float untuk melakukan pengurangan.

Cara Mengonversi Tipe Data di C++

Di C++, ada dua cara untuk mengubah tipe data:

Konversi Tipe Implisit

Menurut aturan yang telah ditentukan oleh kompiler kode C++, konversi tipe implisit adalah konversi tipe yang dilakukan oleh kompiler secara otomatis tanpa memerlukan pemicu eksternal apa pun dari pengguna. Jenis konversi ini biasanya terjadi dalam suatu program ketika terdapat lebih dari satu tipe data, dan tipe data ekspresi tidak cocok dengan tipe data variabel yang terlibat dalam ekspresi ini.







Untuk menghindari kehilangan data selama konversi, compiler secara default mengubah tipe data presisi rendah dengan tipe data presisi lebih tinggi. Misalnya, ini akan mengubah bilangan bulat menjadi bilangan bulat daripada mengubah bilangan bulat menjadi bilangan bulat untuk mencegah kehilangan data. Ini disebut promosi. Berikut adalah diagram prioritas untuk tipe data yang berbeda.





Urutan untuk Konversi Jenis

Urutan yang benar untuk konversi tipe diberikan sebagai:





bodoh -- > arang -- > int pendek -- > ke dalam -- > tidak ditandatangani ke dalam -- > panjang -- > tidak ditandatangani panjang -- > Panjang panjang -- > mengambang -- > dobel -- > ganda panjang

Variabel tipe presisi rendah diubah menjadi tipe data presisi tinggi untuk mencegah kehilangan data.

Contoh 1

Dalam contoh ini, penambahan dilakukan pada variabel tipe data berbeda menggunakan konversi tipe implisit.



#termasuk
menggunakan ruang nama std ;

ke dalam utama ( ) {
ke dalam nomor = 100 ;
arang karakter = 'C' ;
cout << '100 + 'C' = ' << nomor + karakter << akhir ;

mengambang val = nomor + 'C' ;
cout << 'nilai mengambang(100 + 'c') = ' << val << akhir ;

ke dalam dulu = 7890 ;
panjang tidak = dulu ;
cout << 'var_int = ' << tidak ;
kembali 0 ;
}

Di sini bilangan bulat dan karakter dari tabel ASCII, serta bilangan float dan karakter 'c' ditambahkan. Integer disimpan di segmen ketiga sebagai tipe data panjang dan tipe data diubah oleh kompiler itu sendiri berdasarkan aturan yang telah ditentukan sebelumnya.

Jumlah dari 100 dan 'C' menghasilkan 167 karena 'C' sama dengan 67 dalam angka dan 100+'c' menghasilkan 199 karena huruf kecil 'c' sama dengan 99. Variabel int disimpan dalam tipe data panjang.

Contoh 2

Dalam contoh ini, karakter D diubah menjadi float untuk melakukan operasi pembagian.

#termasuk
menggunakan ruang nama std ;

ke dalam utama ( ) {
arang X = 'D' ;

mengambang float_var ;

float_var = mengambang ( X ) / 'C' ;
// Secara eksplisit mengubah int menjadi float.

cout << 'Nilai float_var adalah:' << float_var << akhir ;

kembali 0 ;
}

Nilai masukan berupa karakter D yang disimpan dalam tipe data float dan selanjutnya dibagi dengan karakter C. Karakter-karakter ini diubah menjadi nilai numerik dan dilakukan operasi pembagian terhadapnya, sehingga mengembalikan nilai dalam float.

Konversi Tipe Eksplisit

Pengguna harus mengubah tipe data secara manual dengan konversi tipe eksplisit C++, yang sering dikenal sebagai casting tipe. Jenis casting ini dilakukan untuk menghindari konversi tipe implisit. Ada dua metode untuk melakukan Explicit Type Casting di C++:

  • Konversi menggunakan Operator Penugasan
  • Konversi menggunakan Cast Operator

Ketik Konversi menggunakan Operator Penugasan di C++

Konversi tipe menggunakan Assignment Operator dilakukan secara paksa, yaitu satu tipe data diubah ke tipe data lainnya secara manual. Hal ini dilakukan dengan menggunakan operator penugasan “=”, yang menugaskan nilai operan sebelah kanan ke variabel di sebelah kirinya.

Contoh
Program ini menghitung luas lingkaran menggunakan tipe casting.

#termasuk
#sertakan
menggunakan ruang nama std ;
ke dalam utama ( )
{
ke dalam radius ;
cout <> radius ;
mengambang daerah = M_PI * radius * radius ;
cout << 'Luas lingkaran dengan jari-jari' << radius << ' = ' << daerah ;
}

Operator penugasan digunakan untuk menetapkan nilai float pada suatu area, yang terdiri dari nilai radius dalam tipe data integer.

Luas lingkaran dikembalikan dalam tipe data float, sedangkan radius dimasukkan dalam tipe data integer. Dengan demikian, tipe data variabel diubah melalui casting tipe menggunakan operator penugasan.

Ketik Konversi Menggunakan Operator Cast di C++

Konversi tipe dilakukan dengan menggunakan cast operator yang memaksa suatu tipe data diubah menjadi tipe lain sesuai kebutuhan program.

Ada empat Operator Pemeran yang berbeda:

  • static_cast
  • const_cast
  • dinamis_cast
  • interpretasi ulang_cast

1: static_cast

static_cast adalah operator casting yang digunakan untuk secara eksplisit mengubah float dan karakter menjadi bilangan bulat dan seterusnya. Ini adalah operator pemeran paling dasar. Itu dapat menampilkan tipe data yang serupa sifatnya. Itu dapat mengkonversi pointer dari satu bentuk ke bentuk lainnya, sehingga dapat juga digunakan untuk manajemen memori.

Sintaksis

static_cast ( ekspresi )

Contoh
Program ini dibuat untuk mengubah variabel ganda menjadi tipe data int menggunakan static_cast. Ini akan memotong bagian desimal apa pun dalam output.

#termasuk
menggunakan ruang nama std ;
ke dalam utama ( )
{
// mendeklarasikan sebuah variabel
dobel P ;
P = 2.905 * 1.235 * 24.675 ;
mengambang hasil ;

cout << ' Sebelum menggunakan pemeran statis:' << akhir ;
cout << ' Nilai p = ' << P << akhir ;

// gunakan static_cast untuk mengonversi tipe data
hasil = static_cast ( P ) ;
cout << ' Setelah menggunakan pemeran statis: ' << akhir ;
cout << ' Nilai hasil = ' << hasil << akhir ;

kembali 0 ;
}

Awalnya, variabel ganda p diisi dengan nilai yang dikalikan satu sama lain dan disimpan dalam hasilnya. Hasilnya berisi hasil sebelum dan setelah operator static_cast:

Sebelum menggunakan operator static_cast hasilnya ditampilkan dalam koma desimal, sedangkan setelah menggunakan operator ini ditampilkan dalam tipe data integer.

2: const_cast

Operator const_cast digunakan untuk mengubah nilai konstan suatu objek menjadi tipe non-konstan. Ini digunakan ketika objek konstan dideklarasikan, dan kita perlu mengubah nilainya sesekali.

Sintaksis

const_cast ( ekspresi )

Contoh
Dalam contoh ini, operator const_cast digunakan untuk menghapus qualifier konstan sementara dan memungkinkan dilakukannya perubahan pada variabel sesuai kebutuhan:

#termasuk
menggunakan ruang nama std ;
ke dalam utama ( ) {
konstanta ke dalam X = 70 ;
konstanta ke dalam * Dan = & X ;
cout << 'Nilai lama adalah' << * Dan << ' \N ' ;
ke dalam * Dengan = const_cast ( Dan ) ;
* Dengan = 90 ;
cout << 'Nilai baru adalah' << * Dan ;
kembali 0 ;
}

Kualifikasi konstanta ditetapkan ke variabel int x yang berarti variabel ini tidak dapat diubah secara langsung. Setelah itu int *y yang merupakan pointer digunakan untuk mengakses x, namun tetap tidak dapat diubah, dan nilai aslinya ditampilkan menggunakan cout. Menggunakan operator const_cast, dibuat pointer z yang tidak konstan, digunakan untuk mengakses nilai x sehingga dapat diedit. Ini mengubah nilai yang diberikan ke z dengan 90 yang secara tidak langsung mengubah nilai x.

Awalnya nilai konstanta variabel x adalah 70 yang diubah dengan menggunakan operator const_cast sehingga menjadi 90.

3: transmisi_dinamis

dengan hierarki warisan, yang juga disebut sebagai downcast yang aman untuk tipe. Down casting adalah proses mengubah referensi atau pointer menjadi kelas turunan dari referensi atau pointer kelas dasar.

Sintaksis

dinamis_cast ( ekspresi )

Contoh
Dalam contoh ini, operator Dynamic_cast digunakan untuk memeriksa tipe kelas polimorfik, dan memungkinkan akses ke anggota kelas dasar dan turunan.

#termasuk
#termasuk
menggunakan ruang nama std ;
kelas Basis TB
{
publik :
mengambang dasar_g = 9.81 ;

maya ruang kosong contoh ( )
{

} ;
} ;

kelas Berasal : publik Basis TB
{
publik :
ke dalam lokal_g = 9.78 ;
} ;

ke dalam utama ( )
{

Basis TB * basis = baru Berasal ;
Berasal * berasal dari ;

berasal dari = dinamis_cast ( basis ) ;

cout < dasar_g << akhir ;
cout < lokal_g << akhir ;

dapatkanchar ( ) ;
kembali 0 ;
}

Dua kelas didefinisikan sebagai kelas dasar dan kelas turunan. Basis penunjuk tipe TBase* dibuat dan ditetapkan ke objek tipe TDerived yang dialokasikan secara dinamis. Objek kelas turunan dapat ditugaskan ke penunjuk kelas dasar dalam contoh polimorfisme ini. Dynamic_cast memeriksa apakah penunjuk mengakses objek TDerived yang valid, jika pemeran mendapatkan hasil yang berhasil, kelas turunan akan mendapatkan hasil yang valid jika tidak maka akan mengembalikan nilai nol.

4: interpretasi ulang_cast

Reinterpret_cast mengubah pointer dari satu tipe data menjadi pointer dari tipe data berbeda. Itu tidak memeriksa apakah tipe data pointer sama atau tidak. Operator pengecoran ini perlu digunakan dan ditangani dengan hati-hati.

Contoh
Dalam ilustrasi ini, pointer dari satu tipe data ditafsirkan ulang menjadi pointer tipe data lain menggunakan reinterpret_cast:

#termasuk
menggunakan ruang nama std ;

ke dalam utama ( )
{
ke dalam * Q = baru ke dalam ( 70 ) ;
arang * bab = interpretasi ulang_cast ( Q ) ;
cout << * Q << akhir ;
cout << * bab << akhir ;
cout << Q << akhir ;
cout << bab << akhir ;
kembali 0 ;
}

Awalnya, bilangan bulat diberi nilai 70. Penunjuk q menunjuk ke bilangan bulat yang dialokasikan secara dinamis ini. reinterpret_cast digunakan untuk menafsirkan ulang penunjuk q sebagai penunjuk karakter ch, yang berarti bahwa memori yang awalnya ditugaskan ke q sekarang diperlakukan seolah-olah itu adalah sebuah karakter. Menggunakan perintah cout, ia mencetak nilai yang ditetapkan ke q dan ch. Karena ch diperlakukan sebagai penunjuk karakter, ia akan mengembalikan nilai karakter.

Ini mencetak nilai yang menunjuk ke ch menggunakan *ch. Namun, karena ch diperlakukan sebagai penunjuk karakter, baris ini akan menafsirkan memori sebagai karakter. Ini mencetak alamat memori yang disimpan dalam pointer ch menggunakan ch. Ini adalah alamat memori yang sama dengan q karena ini hanyalah interpretasi ulang dari memori yang sama.

Awalnya, integer menyimpan 70. Kemudian, ini dimanipulasi antara pointer q dan pointer ch. Output 2 dan 4 sama karena nilai kedua diinterpretasikan ulang menggunakan reinterpret_cast.

Catatan : Disarankan untuk tidak menggunakan operator cor ini sampai dan kecuali sangat diperlukan karena hal ini menjadikan objek tersebut sebagai produk non-portabel

Kesimpulan

Proses mengubah tipe data dari satu variabel ke variabel lain dikenal sebagai konversi tipe atau casting tipe dalam C++. Hal ini dilakukan untuk melakukan operasi matematika pada variabel bertipe data berbeda, dengan membuat tipe datanya kompatibel satu sama lain. Konversi jenis mengoptimalkan kode. Ada konversi tipe implisit dan eksplisit di C++. Konversi tipe implisit dilakukan oleh kompiler sendiri menggunakan seperangkat aturan yang telah ditentukan, sedangkan konversi tipe eksplisit dilakukan oleh programmer menggunakan operator penugasan dan operator cast.