Forum: D Programlama Dili RSS
Ebeveyn Sınıf
Avatar
zekeriyadurmus #1
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Ebeveyn Sınıf
class A{
 string b;
 this(string b){
  this.b = b;
 }
}
 
class B : A{
  this(A a){
     //super = a;
  }
}
 
void main(){
   auto x = new A("test");
 
   auto y = new B(x);
}

İstediğim şey böyle bir şey :) Şimdi ayrı ayrı d dosyalarında sınıflarım var ve ana sınıfımdan diğer sınıfları new ile oluşturuyor/çağırıyorum. Ana sınıfımda veritabanı bilgileri gibi çeşitli bilgiler var ve diğer bütün sınıflar bu ana sınıfı kalıtım yoluyla alıyor. Diğer sınıfların içerisinde tekrardan super ile çağırmak istemiyorum zaten hali hazırda kendisini çağıran o sınıfı super sınıf olarak kabul etmesini istiyorum.

Böyle bir olanak var mı D dilinde? Eğer anlatamadıysam söyleyin biraz daha açmaya çalışayım :)

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #2
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ı
Nesne kurulurken üst sınıf parçası da aynı anda kurulur. Üst sınıf parçasının toptan atanması normalde mümkün değil. Bunun bir nedeni, sınıflarda opAssign'ın yüklenemiyor olması. Belki std.algorithm'da "şu sınıf nesnesini şu nesne ile değiştir" diye genel bir işlev vardır ama ben bilmiyorum.

Buna rağmen, sorduğun kadarının çözümü, alias this:
import std.stdio;
 
class A{
    string b;
    this(string b){
        this.b = b;
    }
    void foo()
    {
        writeln(b);
    }
}
 
class B {
    A a;
 
    alias a this;
 
    this(A a){
        this.a = a;
    }
}
 
void main(){
    auto x = new A("test");
 
    auto y = new B(x);
 
    // B de A gibi kullanılabiliyor:
    y.foo();    // "test" yazar
}
Ne yazık ki alias this'in hâlâ giderilmemiş olan bir sorunu var: Bir sınıfta veya yapıda ancak tek alias this olabiliyor. (Bu, yalnızca bir gerçekleştirme sorunu; birisi ele aldığında düzelecek.)

Ve tabii ki gerçek kalıtım değil.

mixin'e kadar gitmeyi gerektirmeyen başka çözümler de düşünülebilir herhalde. Doğrusu, bu istediğini bu güne kadar pek duymadım. Demek ki başka çözümleri olmalı. :)

Ali
Avatar
zekeriyadurmus #3
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hocam bu kullanım da çok işimi görür :-D teşekkür ederim.

Şu an mobilim test edemiyorum ama şu çoklu Alias olayını anlamadım ve Alias yaptıktan sonra o sınıfın normal üyelerine erişebiliyor muyuz?
Bilgi meraktan gelir...
acehreli (Moderatör) #4
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ı
zekeriyadurmus:
Hocam bu kullanım da çok işimi görür

Her durumda göremeyebilir çünkü B A'dan türetilmediği zaman onun sanal işlevini kendisi tekrar belirleyemez. (Onun da yolu olmalı ama 'alias this' tam kalıtım değil; daha çok "onun yerine kullanıldığımda bu üyemden yararlan" demek.)

çoklu Alias olayını anlamadım

'alias this' çok basit bir olanak:

  http://ddili.org/ders/d/alias_this.html

Oradan alıntı;

Not: Bu bölümü yazdığım sırada kullandığım dmd'nin 2.062 sürümü bu konuda henüz yetersiz; yalnızca tek alias this bildirimine izin veriyor.

Not: 2.064 de öyle. :)

ve Alias yaptıktan sonra o sınıfın normal üyelerine erişebiliyor muyuz?

Evet, sınıf hâlâ B ama A gibi kullanılması gereken yerde, 'alias this' ile belirtilmiş olan üyesi kullanılıyor.

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:
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-21, 13:09:58 (UTC -08:00)