C++ ile kodlama yapılırken
standartlar gereği bir parametreli constructor tanımlanırken (copy constructor dışında) constructor'ın explicit olarak tanımlanması
özel bir neden yoksa daha doğru olacaktır.
Peki neden böyle bir standart vardır? Oluşabilecek hatalı çalışmalara açıklık getirirsek neden bir standart haline getirildiği açıklığa kavuşmuş olacaktır:
|
conversion constructor |
Yukarıdaki kod nasıl çalıştı?
Yukarıda nesnenin yaratılması sırasında bir parametreli constructor'ın çağrıldığı görülmektedir. Ama
neden? Burada sınıf içinde implicit bir tür dönüştürme işlemi gerçekleşmiş ve bir parametreli constructor çağrılarak nesne yaratılmıştır. Bu nedenle bir parametreli bu tür constructor'lara conversion constructor'da denilmektedir. Böyle bir durumun dikkate alınmaması ileride gözden kaçacak bir çok problemin ortaya çıkmasına neden olabilecektir. Yukarıda bahsettiğimiz
Fax f = 12; kod parçasını aşağıda gözlemlediğimiz;
ile benzer şekilde çalıştığı görülmektedir.
|
Bir parametreli constructor ile nesnenin yaratılması |
|
Bir parametreli constructor ile nesnenin yaratılması |
Yukarıda
Fax f=12 ifadesinin
geçerli bir kod olmasını engellemek için bir parametreli constructor'ın explicit olarak tanımlanması yeterli olacaktır.
|
explicit constructor |
Sınıflar için implicit type conversion durumunu engellemek dikkat edilmesi gereken constructor türü bir parametreli (
Single-argument constructors) constructorlardır. Constructor için explicit anahtar sözcüğü eklendikten sonra kodun derlenemediği yukarıda da görülebilmektedir. Bu kural copy constructor harici bir parametreli constructorlar için geçerlidir.