Rule INT#001 - Bir Parametreli Constructor (Single-argument constructors)

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;

  • Fax  f(12);
  • Fax f{13}; 
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.