March 07, 2013

Eğer onun da kopyala'sı varsa o çağrılır:

   private this(int veri, kar sınıf) {
       this.bilgi = veri;
       this.sınıf = sınıf.kopyala();
   }

Veya aslında benim açıklama satırındaki örneğim değiştirilebilir ve kopya önceden alınır ve kurucu verileni kullanır:

   return new nar(bilgi, sınıf.kopyala());

Veya duruma göre başka bir şey yapılır. Sınıflarda kopyalama konusu tamamen programcıya kalmış. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 07, 2013

Alıntı (Salih Dinçer):

>

ilk aklıma gelen çözüm ile ikincisinin karışımını denediğimde "access violation" hatası alıyorum...

>   this(int veri, kar ismi) {
>     this.bilgi = veri;
>     this.sınıf.adı = ismi.adı;
>   }
> ```


this.sınıf null olduğu için.

Alıntı:
> Dikkat ederseniz kopyala() işlevinin yanındaki const takısını iptal ettim çünkü bu sefer de başka hata veriyordu.

nar kopyala() @property const {
return new nar(bilgi, sınıf);
}


'
Error: constructor deneme.nar.this (int veri) is not callable using argument types (const(int),const(kar))
Error: cannot implicitly convert expression (this.sınıf) of type const(kar) to deneme.kar
'

kopyala'yı const yaptığımız zaman bu nesnenin hiçbir üyesini değiştirmeyeceğimiz sözünü vermiş oluyor. Ama ondan sonra 'sınıf' üyesini yeni bir nesne oluştururken kurucu işleve geçiriyoruz. O kurucunun bizim 'sınıf'ta değişiklik yapmayacağı belli değil. Onun için kurucunun da const kar alması gerek:

class nar {
int bilgi;
kar sınıf;

this(int veri) {
this.bilgi = veri;
sınıf = new kar();
}

this(int veri, const kar ismi) {
this.bilgi = veri;
this.sınıf = ismi.kopyala();
}

nar kopyala() @property const {
return new nar(bilgi, sınıf);
}
}

class kar {
string adı;

this(string veri = "") {
this.adı = veri;
}

kar kopyala() const {
/* Burada adı'yı ayrıca kopyalamaya gerek yok çünkü nasıl olsa
* immutable char'lardan oluşuyor. Bu nesne ve yeni oluşturulan nesne
* aynı karakterleri paylaşacaklar. Güzel... :) */
return new kar(adı);
}
}


Alıntı:
> bize bildirilen üyeleri bilseydik gerçek manada kopyalayamazdık.

Doğru. Nasıl kopyalandığını türün kendisinin bilmesi gerek.

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
1 2
Next ›   Last »