İlkleme listesinin kullanılmasının geçerli nedenleri var. Ayrıca bana kafa karıştırıcı gelmiyor.
Yani şöyle diyorsun:
Kod:
Dikdortgen(double en, double boy)
{
en_ = en;
boy_ = boy;
}
O işlemler ilkleme değil, atamadır. Atama iki işlemden oluşur: var olan değerin sonlandırılması ve yeni değerin kopyalanması. int gibi temel türden olan üyelerde bunun önemi yok tabii ama sınıfların çoğu üyesi başka türlerdendir.
Atamanın iki alt işlemden oluştuğunu vurguladıktan sonra bakabiliriz:
1) atanamayan türlerde çalışmaz
1a) örneğin referans üyelerde çalışmaz; referansların bir kere ilklenmeleri gerekir; atama işlemi de zaten referansın "gösterdiği" nenseyi değiştirir. Örneğin en_ bir 'int&' olsaydı yukarıdaki kurucu çalışmazdı
1b) operator= işleçleri iptal edilmiş olan bir çok kullanıcı türü vardır: örneğin boost::scoped_ptr; yukarıdaki kurucu onlarla da çalışmaz
2) kurucu işlevin { parantezinden içeri girildiği an bütün üyeler ya ilklenmişlerdir, ya da o fırsat kaçmıştır
2a) Örneğin std::string türünden bir üye zaten boş olarak ilklenmiştir. Atama işlemi gereksizce zaman harcar
2b) (Bu tamamen teorik) Yukarıdaki en_ ve boy_, atama işleminde "hiç ilklenmeden" kullanılmaktadırlar. Dil standardının gözünde bu tanımsız davranıştır
Katılıyorum. C++ dili, o güne kadar yazılmış C programlarının çok az değişiklikle derlenebilmelerini hedeflediği için olabildiğince az işleç ve olabildiğince az anahtar sözcük getirmeye çalışmıştır.
Belki de : karakterini o yüzden düşünmüşlerdir.
Çamur atmakta hiçbir sakınca yok. Gösterdiğin nedenler geçerli ama ilkleme listesinin neden gerekli olduğunu da hatırlamak gerek.
Ali
Bookmarks