C++'ta derleyicinin otomatik olarak yaptıklarının dışında beş tane tur donuşumu vardır:



1) static_cast
2) const_cast
3) dynamic_cast
4) reinterpret_cast
5) C'den kalan parantezli tur donuşumu


C'nin tur donuşumu hÂl en guvensizidir. C++'ın getirdikleri icinde de reinterpret_cast, davranışı calışılan ortama bağlı olduğu icin ve nesnelerin bitlerini değişik anlamda kullandırdığı icin en guvensizidir.

C'den kalan tur donuşumunu zaten hic kullanmayın. Derleyici size bu konuda hicbir yardımda bulunmaz. C++'ın getirdiklerini kullanırsanız, yanlış kullandığınız yerlerde derleme hataları ile uyarılabilirsiniz.

Aslında zaten tur donuşumlerinden her zaman icin uzak durmaya bakın. Tur donuşumunun neden gerektiğini soruşturun ve kacınmaya calışın.

1) static_cast: Derleme zamanında bilinen tur donuşumleri icin kullanılır. Programcının derleyiciye "ben bu nesnenin calışma zamanında bile aslında şu turden olduğundan eminim" demesi gibidir. (Buradaki 'static' sozcuğu, derleme zamanını belirliyor.)

Derleyici yasal olmayan donuşumlerde hata verir. Yine de programcının derleyiciye yalan soylememesi iyi olur İşte derleyiciye yanlış bilgi verdiğimiz icin gocen bir program:

Kod:
#include struct Hayvan;class Kus : public Hayvan;public: Kus() : p_(new int(birSayi)) ~Kus() void kanatCirp() else }};struct Fil : public Hayvan;void agactanAtla(Hayvan & hayvan)int main()
Yukarıdaki ornekte, aslında Hayvan turuyle calışan, ama belli bir noktada bir Kus'un sunduğu kanatCirp işlevini cağırması gereken agactanAtla adlı bir işlev var.

Programcı, o noktada 'hayvan' değişkeninin aslında gercekten bir Kus olduğunu duşunerek derleyiciye bunu bildiriyor. Derleyici de programı buna inanarak derliyor.

Calışma zamanında, işlev ilk cağrıldığında calışıyor ama ikincisinde gocuyor. Bu orneği, static_cast'in bir doğru, bir de yanlış kullanımını gostermek icin verdim.


2) const_cast: Aslında const ve/veya volatile olmadığını bildiğimiz, ama bir noktada karşımıza const ve/veya volatile olarak cıkan bir nesnenin const'lığını ve/veya volatile'lığını kaldırmak icin kullanılır. Yine nesnenin gercekten oyle olduğundan emin olmamız gerekir.

Bazı insanlar, volatile ile de calıştığı icin, adının bunu da belirtecek şekilde secilmiş olması gerektiğini duşunurler.
Orneğin 'cv_cast' gibi bir ad daha uygun olabilirmiş; cunku C++ standardında const ve/veya volatile belirteclerine de her birden 'cv-qualification' denir.

Coğunlukla const referans (veya gosterge) alması gerektiği halde kotu tasarım sonucu const olmayan referans (veya gosterge) alan işlevleri cağırmada kullanılır. Boyle işlevler bazı kutuphanelerde karşımıza cıkabilirler.

Kod:
#include // Kotu tasarlanmis bir islev.// Parametresinde degisiklik yapmadigi// halde onu 'const' olarak tanimlamamis.int toplam_a_harfi(char * dizgi) return toplam;}// Bu islev, parametresinde degisiklik// yapmayacagi icin, onu dogru olarak// 'const' olarak tanimlamis.int toplam_a_harfinin_karesi(char const * dizgi)int main()

__________________