C++'da Veri Türleri Nasıl Dönüştürülür

C Da Veri Turleri Nasil Donusturulur



Bir değişkenin veri tipini diğerine değiştirme işlemi, C++'da tip dönüşümü veya tip dönüşümü olarak bilinir. Bu, farklı veri türlerindeki değişkenler üzerinde, veri türlerini birbiriyle uyumlu hale getirerek matematiksel işlemler gerçekleştirmek için yapılır. Tür dönüşümü kodu optimize eder. Örneğin iki değişken arasındaki fark hesaplanırken, sayılardan biri float tipinde, diğeri tamsayı veri tipinde ise, çıkarma işlemini gerçekleştirmek için tamsayı veri tipi float tipine dönüştürülecektir.

C++'da Veri Türleri Nasıl Dönüştürülür

C++'da veri türlerini değiştirmenin iki yolu vardır:

Örtülü Tip Dönüşümü

Örtülü tür dönüşümü, C++ kod derleyicisinin önceden tanımladığı kurallara göre, kullanıcıdan herhangi bir harici tetikleyiciye ihtiyaç duymadan, derleyici tarafından otomatik olarak gerçekleştirilen tür dönüşümüdür. Bu tür dönüştürme genellikle bir programda birden fazla veri türü olduğunda ve ifadenin veri türü, bu ifadede yer alan değişkenin veri türüyle eşleşmediğinde gerçekleşir.







Dönüştürme sırasında veri kaybını önlemek için, derleyici varsayılan olarak düşük kesinlikteki veri türünü daha yüksek kesinlikteki veri türüyle değiştirir. Örneğin, veri kaybını önlemek için kayan noktayı tam sayıya dönüştürmek yerine bir tam sayıyı kayan noktaya dönüştürür. Buna promosyon denir. Aşağıda farklı veri türleri için öncelik diyagramı verilmiştir.





Tip Dönüşüm Sırası

Tip dönüşümü için doğru sıra şu şekilde verilmiştir:





bool... > karakter -- > kısa iç -- > int -- > imzasız int -- > uzun -- > imzasız uzun -- > uzunca -- > batmadan yüzmek -- > çift ​​-- > uzun çift

Veri kaybını önlemek için düşük duyarlıklı tür değişkeni yüksek duyarlıklı veri türüne dönüştürülür.

örnek 1

Bu örnekte, örtülü tür dönüşümü kullanılarak farklı veri türlerindeki değişkenlere ekleme işlemi gerçekleştirilir.



#include
kullanarak ad alanı std ;

int ana ( ) {
int sayı = 100 ;
karakter karakter = 'C' ;
cout << '100 + 'C' = ' << sayı + karakter << sonunda ;

batmadan yüzmek val = sayı + 'C' ;
cout << 'float val(100 + 'c') = ' << val << sonunda ;

int öyleydi = 7890 ;
uzun değildi = öyleydi ;
cout << 'var_int = ' << değildi ;
geri dönmek 0 ;
}

Burada ASCII tablosundan bir tam sayı ve bir karakter ile bir kayan sayı ve 'c' karakteri eklenir. Tamsayı, uzun bir veri türü olarak üçüncü segmentte tutulur ve veri türleri, önceden tanımlanmış kurallara göre derleyicinin kendisi tarafından değiştirilir.

100 ve 'C' toplamı 167 değerini döndürür, çünkü 'C' sayı olarak 67'ye eşittir ve 100+'c', küçük harf 'c' 99'a eşit olduğundan 199 değerini döndürür. İnt değişkeni uzun bir veri türünde saklanır.

Örnek 2

Bu örnekte, bölme işlemini gerçekleştirmek için D karakteri kayan noktaya dönüştürülür.

#include
kullanarak ad alanı std ;

int ana ( ) {
karakter X = 'D' ;

batmadan yüzmek float_var ;

float_var = batmadan yüzmek ( X ) / 'C' ;
// int'yi açık bir şekilde float'a dönüştürüyoruz.

cout << 'Float_var'ın değeri: ' << float_var << sonunda ;

geri dönmek 0 ;
}

Giriş değeri, float veri tipinde saklanan ve ayrıca C karakterine bölünen D karakteri biçimindedir. Bu karakterler sayısal değerlere dönüştürülür ve üzerlerinde bir bölme işlemi gerçekleştirilerek, değer float cinsinden döndürülür.

Açık Tür Dönüşümü

Kullanıcının, genellikle tür dönüştürme olarak bilinen, C++'ın açık tür dönüşümüyle veri türünü manuel olarak değiştirmesi gerekir. Bu tip döküm, örtülü tip dönüşümünü önlemek için yapılır. C++'da Açık Tip Dökümü gerçekleştirmenin iki yöntemi vardır:

  • Atama Operatörünü kullanarak dönüştürme
  • Cast Operatörünü kullanarak dönüştürme

C++'da Atama Operatörünü Kullanarak Tür Dönüştürme

Atama Operatörü kullanılarak tür dönüşümü zorla gerçekleştirilir, yani bir veri türü diğerine manuel olarak dönüştürülür. Bu, sağ taraftaki işlenenin değerini sol tarafındaki değişkene atayan atama operatörü “=” kullanılarak gerçekleştirilir.

Örnek
Bu program, tip dökümü kullanarak dairenin alanını hesaplar.

#include
#include
kullanarak ad alanı std ;
int ana ( )
{
int yarıçap ;
cout <> yarıçap ;
batmadan yüzmek alan = M_PI * yarıçap * yarıçap ;
cout << 'Yarıçaplı dairenin alanı' << yarıçap << ' = ' << alan ;
}

Tamsayı veri tipinde yarıçap değerinden oluşan alana float değerini atamak için atama operatörü kullanılır.

Çemberin alanı kayan veri tipinde döndürülürken, yarıçap tamsayı veri tipinde girilir. Böylece değişkenin veri türü, atama operatörü kullanılarak tür değiştirme yoluyla değiştirilir.

C++'da Cast Operatörünü Kullanarak Tür Dönüştürme

Tür dönüştürme, programın ihtiyaçlarına göre bir veri türünü başka bir türe değiştirmeye zorlayan bir dönüştürme operatörü kullanılarak yapılır.

Dört farklı Cast Operatörü vardır:

  • static_cast
  • const_cast
  • dinamik_cast
  • yeniden yorumlama_cast

1: static_cast

Statik_cast, kayan noktaları ve karakterleri açıkça tamsayılara vb. dönüştürmek için kullanılan dönüştürme operatörüdür. Bu en temel cast operatörüdür. Doğası gereği benzer veri türlerini yayınlayabilir. İşaretçileri bir formdan diğerine dönüştürebilir, böylece bellek yönetimi için de kullanılabilir.

Sözdizimi

static_cast ( ifade )

Örnek
Bu program, double değişkenini static_cast kullanarak int veri türüne dönüştürmek için oluşturulmuştur. Çıktıdaki herhangi bir ondalık kısmı kesecektir.

#include
kullanarak ad alanı std ;
int ana ( )
{
//bir değişken tanımlayalım
çift P ;
P = 2.905 * 1.235 * 24.675 ;
batmadan yüzmek sonuç ;

cout << ' Statik dönüşümü kullanmadan önce:' << sonunda ;
cout << ' p'nin değeri = ' << P << sonunda ;

// veri türünü dönüştürmek için static_cast'ı kullanın
sonuç = static_cast ( P ) ;
cout << ' Statik dönüşümü kullandıktan sonra: ' << sonunda ;
cout << ' Sonucun değeri = ' << sonuç << sonunda ;

geri dönmek 0 ;
}

Başlangıçta, bir çift değişken p, birbiriyle çarpılan değerlerle yüklenir ve sonuçta saklanır. Sonuç, static_cast operatöründen önceki ve sonraki sonucu içerir:

Static_cast operatörünü kullanmadan önce sonuç ondalık rakamlarla görüntülenirken, bu operatörü kullandıktan sonra tamsayı veri tipinde görüntülenir.

2: const_cast

const_cast operatörü, bir nesnenin sabit değerini sabit olmayan türe dönüştürmek için kullanılır. Sabit bir nesnenin bildirildiği yerlerde kullanılır ve zaman zaman değerini değiştirmemiz gerekir.

Sözdizimi

const_cast ( ifade )

Örnek
Bu örnekte const_cast operatörü, sabit niteleyiciyi geçici olarak kaldırmak için kullanılmış ve değişkende ihtiyaca göre değişiklik yapılmasına olanak sağlamıştır:

#include
kullanarak ad alanı std ;
int ana ( ) {
yapı int X = 70 ;
yapı int * Ve = & X ;
cout << 'Eski değer' << * Ve << ' \N ' ;
int * İle = const_cast ( Ve ) ;
* İle = 90 ;
cout << 'Yeni değer:' << * Ve ;
geri dönmek 0 ;
}

Sabit niteleyici bir int değişkeni x'e atanır; bu, bu değişkenin doğrudan değiştirilemeyeceği anlamına gelir. Bundan sonra bir işaretçi olan int *y, x'e erişmek için kullanılır, ancak yine de değiştirilemez ve orijinal değeri cout kullanılarak görüntülenir. Const_cast operatörünü kullanarak, sabit olmayan bir z işaretçisi oluşturulur, x'in değerine erişmek ve onu düzenlenebilir hale getirmek için kullanılır. Z'ye atanan değeri 90 ile değiştirir, bu da dolaylı olarak x'in değerini değiştirir.

Başlangıçta x sabit değişkeninin değeri 70'tir ve const_cast operatörü kullanılarak değiştirilerek 90 olur.

3: dinamik_cast

tür açısından güvenli aşağı doğru olarak da adlandırılan kalıtım hiyerarşisi ile. Aşağıya dönüştürme, bir referansı veya işaretçiyi, temel sınıf referansından veya işaretçisinden türetilmiş bir sınıfa dönüştürme işlemidir.

Sözdizimi

dinamik_cast ( ifade )

Örnek
Bu örnekte, dinamik_cast operatörü polimorfik sınıfın türünü kontrol etmek için kullanılır ve hem temel hem de türetilmiş sınıf üyelerine erişime izin verir.

#include
#include
kullanarak ad alanı std ;
sınıf TBase
{
halk :
batmadan yüzmek temel_g = 9.81 ;

sanal geçersiz kukla ( )
{

} ;
} ;

sınıf Türetilmiş : halk TBase
{
halk :
int yerel_g = 9.78 ;
} ;

int ana ( )
{

TBase * temel = yeni Türetilmiş ;
Türetilmiş * türetilmiş ;

türetilmiş = dinamik_cast ( temel ) ;

cout < temel_g << sonunda ;
cout < yerel_g << sonunda ;

getchar ( ) ;
geri dönmek 0 ;
}

Temel ve türetilmiş sınıflar olarak iki sınıf tanımlanır. TBase* türünde bir işaretçi tabanı oluşturulur ve TDerived türünde dinamik olarak tahsis edilmiş bir nesneye atanır. Bu polimorfizm örneğinde türetilmiş bir sınıf nesnesi bir temel sınıf işaretçisine atanabilir. Dynamic_cast, işaretçinin TDerived'in geçerli nesnesine erişip erişmediğini kontrol eder; eğer cast başarılı bir sonuç alırsa türetilmiş sınıf geçerli bir sonuç alır, aksi takdirde boş bir değer döndürür.

4: yayını yeniden yorumlamak

reinterpret_cast, bir veri tipindeki işaretçiyi farklı bir veri tipindeki işaretçiye dönüştürür. İşaretçilerin veri türlerinin aynı olup olmadığını kontrol etmez. Bu döküm operatörünün dikkatli kullanılması ve ele alınması gerekir.

Örnek
Bu çizimde, bir veri türünün işaretçisi, reinterpret_cast kullanılarak başka bir veri türünün işaretçisine yeniden yorumlanır:

#include
kullanarak ad alanı std ;

int ana ( )
{
int * Q = yeni int ( 70 ) ;
karakter * ch = yeniden yorumlama_cast ( Q ) ;
cout << * Q << sonunda ;
cout << * ch << sonunda ;
cout << Q << sonunda ;
cout << ch << sonunda ;
geri dönmek 0 ;
}

Başlangıçta, 70 değerine sahip bir tam sayı atanır. q işaretçisi, dinamik olarak tahsis edilen bu tam sayıyı işaret eder. reinterpret_cast, q işaretçisini bir karakter işaretçisi ch olarak yeniden yorumlamak için kullanılır; bu, başlangıçta q'ya atanan belleğin artık bir karaktermiş gibi ele alındığı anlamına gelir. cout komutunu kullanarak q ve ch'ye atanan değeri yazdırır. Ch bir karakter işaretçisi olarak değerlendirildiğinden, bir karakter değeri döndürecektir.

*ch kullanarak ch'ye işaret edilen değeri yazdırır. Ancak ch bir karakter işaretçisi olarak değerlendirildiğinden bu satır hafızayı bir karakter olarak yorumlayacaktır. ch işaretçisinde saklanan hafıza adresini ch kullanarak yazdırır. Bu, q ile aynı hafıza adresidir çünkü sadece aynı hafızanın yeniden yorumlanmasıdır.

Başlangıçta tamsayı 70'i saklar. Daha sonra bu, q işaretçisi ile ch işaretçisi arasında işlenir. Çıkış 2 ve 4 aynıdır çünkü ikinci değer reinterpret_cast kullanılarak yeniden yorumlanır.

Not : Nesneyi taşınabilir olmayan bir ürün haline getirdiği için bu cast operatörünün çok ihtiyaç duyulmadıkça kullanılmaması önerilir.

Çözüm

Bir değişkenin veri tipini diğerine değiştirme işlemi, C++'da tip dönüşümü veya tip dönüşümü olarak bilinir. Bu, farklı veri türlerindeki değişkenler üzerinde, veri türlerini birbiriyle uyumlu hale getirerek matematiksel işlemler gerçekleştirmek için yapılır. Tür dönüşümü kodu optimize eder. C++'ta örtülü ve açık tür dönüşümleri vardır. Örtülü tür dönüşümü, önceden tanımlanmış bir dizi kural kullanılarak derleyicinin kendisi tarafından gerçekleştirilir; açık tür dönüşümü ise atama operatörleri ve atama operatörleri kullanılarak programcı tarafından gerçekleştirilir.