Bu bölümde C++ programlama dilinde değişkenlerin tip dökümü tartışılacaktır. Tip dönüşümü, bir programdaki bir veri tipinin diğerine dönüştürülmesini ifade eder. Typecasting iki şekilde yapılabilir: derleyici tarafından otomatik olarak ve programcı veya kullanıcı tarafından manuel olarak. Tip Döküm aynı zamanda Tip Dönüşümü olarak da bilinir.
Örneğin, verilen verinin bir tamsayı tipi olduğunu ve onu kayan nokta tipine dönüştürmek istediğimizi varsayalım. Bu nedenle, int verilerini float türüne manuel olarak aktarmamız gerekir ve bu tür dönüştürmeye C++'da Tür Değiştirme adı verilir.
int num = 5; float x; x = float(num); x = 5.0
2veörnek:
float num = 5.25; int x; x = int(num); Output: 5
Tür Dökümü iki türe ayrılır: Örtülü dönüştürme veya Örtülü Tür Dökümü ve Açık Tür Dönüştürme veya Açık Tür Dökümü.
Örtülü Tip Dökümü veya Örtülü Tip Dönüştürme
dize biçimi java
- Otomatik tip döküm olarak bilinir.
- Programcı veya kullanıcı gibi herhangi bir dış müdahaleye gerek kalmadan otomatik olarak bir veri türünden diğerine geçiş yapar. Bu, derleyicinin otomatik olarak bir veri türünü diğerine dönüştürdüğü anlamına gelir.
- Tüm veri türleri hiçbir bilgi kaybı olmadan otomatik olarak en büyük türe yükseltilir.
- Bir programda yalnızca her iki değişkenin de birbiriyle uyumlu olması durumunda uygulanabilir.
char - sort int -> int -> unsigned int -> long int -> float -> double -> long double, etc.
Not: Örtülü Tür Dökümü düşük veri türlerinden yüksek veri türlerine doğru yapılmalıdır. Aksi takdirde, temel veri tipi etkilenerek hassasiyet veya veri kaybı yaşanabilir ve derleyici bu yönde bir uyarı verebilir.
C++'ta örtülü tür atamayı kullanan program
C++'da örtülü tip dönüşümü kullanarak bir değişkenin diğerine dönüşümünü göstermek için bir örnek oluşturalım.
#include using namespace std; int main () { short x = 200; int y; y = x; cout << ' Implicit Type Casting ' << endl; cout << ' The value of x: ' << x << endl; cout << ' The value of y: ' << y << endl; int num = 20; char ch = 'a'; int res = 20 + 'a'; cout << ' Type casting char to int data type ('a' to 20): ' << res << endl; float val = num + 'A'; cout << ' Type casting from int data to float type: ' << val << endl; return 0; }
Çıktı:
Implicit Type Casting The value of x: 200 The value of y: 200 Type casting char to int data type ('a' to 20): 117 Type casting from int data to float type: 85
Yukarıdaki programda, kısa veri türü değişkeni x'in 200 olduğunu ve bir tamsayı değişkeni y'yi tanımladık. Bundan sonra, y'ye x değeri atarız ve derleyici otomatik olarak x kısa veri değerini y'ye dönüştürür, bu da y'nin 200 olduğunu döndürür.
Sonraki ifadelerde int tipi değişken num'un 20 olduğunu, karakter tipi değişkeni ch'nin ise 'a' olduğunu ve bunun da 97 tamsayı değerine eşdeğer olduğunu bildirdik. Daha sonra örtülü dönüşümü gerçekleştirmek için bu iki değişkeni topluyoruz, ifadenin sonucunu döndüren sonuç 117'dir.
Benzer şekilde, üçüncü ifadede num tamsayı değişkenini 20 ve karakter değişkeni ch'yi 65 olarak toplayıp sonucu float değişkeni val'e atadık. Böylece ifadenin sonucu derleyici tarafından otomatik olarak float tipine dönüştürülür.
Açık Tür Dökümü veya Açık Tür Dönüşümü
- Bir programda manuel tip döküm olarak da bilinir.
- Bir programdaki bir veri türünden başka bir türe geçiş, programcı veya kullanıcı tarafından manuel olarak yapılır. Bu, kullanıcının bir programdaki gereksinime göre bir veriyi diğerine kolaylıkla aktarabileceği anlamına gelir.
- Değişkenlerin uyumluluğunun kontrol edilmesini gerektirmez.
- Bu dökümde, bir programdaki bir değişkenin veri tipini diğerine yükseltebilir veya düşürebiliriz.
- Bir değişkenin türünü değiştirmek için cast () operatörünü kullanır.
Açık tür atamanın sözdizimi
(type) expression;
tip: Verilen ifadeyi dönüştüren kullanıcı tanımlı verileri temsil eder.
ifade: Sabit değeri, değişkeni veya veri türü dönüştürülen bir ifadeyi temsil eder.
Örneğin, 4,534 şeklinde bir kayan noktalı sayıya sahibiz ve bir tamsayı değerini dönüştürmek için şu ifadeyi kullanalım:
int num; num = (int) 4.534; // cast into int data type cout << num;
Yukarıdaki ifadeler yürütüldüğünde, kayan nokta değeri, cast () operatörü kullanılarak bir tamsayı veri türüne dönüştürülecektir. Ve kayan nokta değeri, ondalık kısmı kesen ve tam sayı değeri olarak yalnızca 4'ü görüntüleyen bir tam sayıya atanır.
C++'da açık tip atamasının kullanımını gösteren program
C++ programlama dilinde açık tür dönüştürmeyi kullanarak bir tür değişkenini başka bir türe dönüştürmek için basit bir program oluşturalım.
#include using namespace std; int main () { // declaration of the variables int a, b; float res; a = 21; b = 5; cout << ' Implicit Type Casting: ' << endl; cout << ' Result: ' << a / b << endl; // it loses some information cout << ' Explicit Type Casting: ' << endl; // use cast () operator to convert int data to float res = (float) 21 / 5; cout << ' The value of float variable (res): ' << res << endl; return 0; }
Çıktı:
Implicit Type Casting: Result: 4 Explicit Type Casting: The value of float variable (res): 4.2
Yukarıdaki programda, değerleri 21 ve 2 olan a ve b olmak üzere iki tamsayı değişkeni alıyoruz. Daha sonra a'yı b'ye (21/2) bölüyoruz, bu da 4 int tipinde bir değer döndürüyor.
İkinci ifadede ise açık tip cast yönteminde cast operatörünü kullanarak a ve b'nin sonuçlarını hiçbir veri kaybetmeden saklayan res kayan tipte bir değişken deklare ediyoruz.
Cast operatörünü kullanarak double veriyi int ve float tipine çeviren program
C++ programlamada double veriyi float ve int tipine dönüştürerek dikdörtgenin alanını elde etmeye yönelik bir örnek düşünelim.
if ifadesi java
#include using namespace std; int main () { // declaration of the variables double l, b; int area; // convert double data type to int type cout << ' The length of the rectangle is: ' <> l; cout << ' The breadth of the rectangle is: ' <> b; area = (int) l * b; // cast into int type cout << ' The area of the rectangle is: ' << area << endl; float res; // convert double data type to float type cout << ' The length of the rectangle is: ' << l << endl; cout << ' The breadth of the rectangle is: ' << b << endl; res = (float) l * b; // cast into float type cout << ' The area of the rectangle is: ' << res; return 0; }
Çıktı:
The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 740 The length of the rectangle is: 57.3456 The breadth of the rectangle is: 12.9874 The area of the rectangle is: 744.77
Tip Dökümün bazı farklı türleri
Type cast'te programın ihtiyaçlarına göre bir veri tipini başka bir veri tipine dönüştürmeye zorlayan cast operatörü bulunmaktadır. C++'da dört farklı türde cast operatörü vardır:
- Statik_cast
- dinamik_cast
- const_cast
- yeniden yorumlama_cast
Statik Döküm:
Statik_cast, bir veri türünü diğerine dönüştüren veya aktaran basit bir derleme zamanı dönüşümüdür. Bu, gerçekleştirilen dönüştürmenin geçerli olup olmadığını çalışma zamanında veri tipini kontrol etmediği anlamına gelir. Bu nedenle programcı veya kullanıcı, dönüşümün güvenli ve geçerli olmasını sağlama sorumluluğuna sahiptir.
Static_cast, örtülü dönüşüm tarafından gerçekleştirilen tüm dönüşümleri gerçekleştirebilecek kadar yeteneklidir. Ayrıca birbiriyle ilişkili sınıfların işaretçileri arasındaki dönüşümleri de gerçekleştirir (upcast - > türetilmişten temel sınıfa veya downcast - > tabandan türetilmiş sınıfa).
Statik Dökümün Sözdizimi
static_cast (expression);
Statik Dökümün kullanımını gösteren program
C++ programlamada type cast'ın statik cast'ını kullanmak için basit bir örnek oluşturalım.
#include using namespace std; int main () { // declare a variable double l; l = 2.5 * 3.5 * 4.5; int tot; cout << ' Before using the static cast:' << endl; cout << ' The value of l = ' << l << endl; // use the static_cast to convert the data type tot = static_cast (l); cout << ' After using the static cast: ' << endl; cout << ' The value of tot = ' << tot << endl; return 0; }
Çıktı:
Before using the static cast: The value of l = 39.375 After using the static cast: The value of tot = 39
Dinamik Oyuncular
Dynamic_cast, yalnızca sınıf işaretçileri ve referanslarda bir tür değişkenin diğerine dönüştürülmesini gerçekleştirmek için kullanılan bir çalışma zamanı dönüştürme operatörüdür. Bu, çalışma zamanında değişkenlerin geçerli dağılımını kontrol ettiği ve eğer döküm başarısız olursa NULL değeri döndürdüğü anlamına gelir. Dinamik döküm, RTTI (Çalışma Zamanı Tip Tanımlaması) mekanizmasına dayanmaktadır.
C++'da Dynamic Cast'ın kullanımını gösteren program
Dynamic_cast'i C++ programlama dilinde gerçekleştirmek için basit bir program oluşturalım.
#include using namespace std; class parent { public: virtual void print() { } }; class derived: public parent { }; int main () { // create an object ptr parent *ptr = new derived; // use the dynamic cast to convert class data derived* d = dynamic_cast (ptr); // check whether the dynamic cast is performed or not if ( d != NULL) { cout << ' Dynamic casting is done successfully'; } else { cout << ' Dynamic casting is not done successfully'; } }
Çıktı:
Dynamic casting is done successfully.
Yayın Türünü Yeniden Yorumlayın
Reinterpret_cast tipi dökümü, verilen işaretçi birbirine ait olsun ya da olmasın, bir işaretçiyi başka herhangi bir işaretçi türüne dönüştürmek için kullanılır. Yani işaretçinin veya işaretçinin işaret ettiği verinin aynı olup olmadığını kontrol etmez. Ayrıca bir tamsayı tipine veya tamsayı tipine bir işaretçi atar.
reinterpret_cast türünün sözdizimi
reinterpret_cast expression;
C++'ta Yeniden Yorumlamayı Kullanacak Program
C++ dilinde yeniden yorumlamayı kullanarak bir işaretçinin dönüşümünü gösterecek bir program yazalım.
#include using namespace std; int main () { // declaration of the pointer variables int *pt = new int (65); // use reinterpre_cast operator to type cast the pointer variables char *ch = reinterpret_cast (pt); cout << ' The value of pt: ' << pt << endl; cout << ' The value of ch: ' << ch << endl; // get value of the defined variable using pointer cout << ' The value of *ptr: ' << *pt << endl; cout << ' The value of *ch: ' << *ch << endl; return 0; }
Çıktı:
The value of pt: 0x5cfed0 The value of ch: A The value of *ptr: 65 The value of *ch: A
Sabit Oyuncular
const_cast, kaynak işaretçisinin const davranışını değiştirmek veya değiştirmek için kullanılır. Bu, const'ı iki şekilde gerçekleştirebileceğimiz anlamına gelir: const işaretçisini const olmayan bir işaretçiye ayarlamak veya const'ı const işaretçisinden silmek veya kaldırmak.
Const Cast türünün sözdizimi
slf4j vs log4j
const_cast exp;
C++'da Const Cast'ı kullanacak program
C++'da const_cast'ı kullanarak bir kaynak işaretçisini cast olmayan bir işaretçiye çevirecek bir program yazalım.
#include using namespace std; // define a function int disp(int *pt) { return (*pt * 10); } int main () { // declare a const variable const int num = 50; const int *pt = # // get the address of num // use const_cast to chnage the constness of the source pointer int *ptr = const_cast (pt); cout << ' The value of ptr cast: ' << disp(ptr); return 0; }
Çıktı:
The value of ptr cast: 500