Forum: Ders Arası RSS
Kurucusu tanımlanan yapılar {} ile kurulamıyorlar
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Kurucusu tanımlanan yapılar {} ile kurulamıyorlar
D2'de yeni değişen bir kural: Programcı tarafından kurucu işlev tanımlanınca, artık C'den kalan {} yazımı çalışmıyor:

struct Dikdörtgen
{
    double uzunluk;
    double genişlik;
    double alan;
 
    this(double uzunluk, double genişlik)
    {
        this.uzunluk = uzunluk;
        this.genişlik = genişlik;
        this.alan = uzunluk * genişlik;
    }
}
 
void main()
{
    auto şekil = Dikdörtgen(1.1, 2.2);
 
    // Kurucu işlevi tanımlı olduğu için DERLEME HATASI
    // Dikdörtgen şekil2 = { 3.3, 4.4 };
}

Ali
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet dediğiniz örnek çalışmıyor. Tam olması gereken gibi.

Ancak şu örnek bende doğru çalışıyor :

void main()
{
    struct GününSaati
    {
        int saat;
        int dakika;
    }
        
    GününSaati dersBaşı = { 8, 30 };
    
}

Çalışmasa derslerden silecektim ancak çalışıyor. Yoksa bendemi D ile ilgili hata buldum :-p ( Bulsam sevinirim :-D )
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Kurucu işlevi tanımlanmamışsa {} çalışır. Sanırım kaldırılacaktı. (?)

Ali
canalpay (Moderatör) #4
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
O zaman dersi kurulum bildiriyor ise {} ile kurulamayacağını ekleyim. (Yarın :-) )

Ama anlamadığım bir şey var. Eğer işleve kurucu işlev tanımlatmadıysak derleyici zaten kendi tanımlamıyor mu ?
Aynı biçimde tanımlıyorsa ne farkı kaldı ?
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
O zaman dersi kurulum bildiriyor ise {} ile kurulamayacağını ekleyim

Bence hiç karıştırma. Bence yalnızca bilinmesi gereken bir olanak olarak dursun. Başka kodlarda görünce ne olduğunu bilelim yeter.

Ama anlamadığım bir şey var. Eğer işleve kurucu işlev tanımlatmadıysak derleyici zaten kendi tanımlamıyor mu ?
Aynı biçimde tanımlıyorsa ne farkı kaldı ?

Yani derleyici {} kullanımında üyeleri art arda ilkliyor. Bizim yazdığımız kurucu ise bambaşka hesaplar ve işlemler yapıyor olabilir.

Bence derleyicinin mantığı şöyle işliyor, "eğer kullanıcı bir kurucu tanımlamışsa, bu yapıda özel bir durum var demektir; ben araya girerek belki de yanlış ilklemeler yapmayayım."

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-23, 23:13:54 (UTC -08:00)