Subject: İç sınıflar
Yeni bir şey öğrendim...
D'nin sınıf içi sınıfları C++'dan daha farklıymış:
Dikkat ederseniz, iç sınıf dış sınıfın bir üyesini kullanabiliyor. Yani, iç sınıftan bir nesne oluşturulabilmesi için, öncelikle bir dış sınıf nesnesi gerekiyor.
Bu, C++'da böyle değildir; iç sınıf açısından bakıldığında, dış sınıf yalnızca bir isim alanı belirler. Örneğin içteki sınıfın uzun ismi DisSinif::IcSinif'tır.
D'de ise iç sınıf, bir dış nesneye bağlı oluyor ve ancak o nesne tarafından oluşturulabiliyor:
Oradaki dış.new kullanımından haberim yoktu!
O programda iki tane iç nesne oluşturuluyor ve ikisi de tek dış nesneyi kullanıyorlar. Sonuçta program "3 işlem yapıldı" yazıyor.
C++'daki gibi olması istenirse, iç sınıfın başına static yazılıyor:
Tabii o zaman dış nesneye bağlantı diye bir kavram olmuyor. Yani ++işlemSayacı; çalışamaz.
Ali
D'nin sınıf içi sınıfları C++'dan daha farklıymış:class DışSınıf { int işlemSayacı; class Görevli { void çalış() { ++işlemSayacı; // ... asıl işlemler ... } } void bilgiVer() { writeln(işlemSayacı, " işlem yapıldı"); } }
Dikkat ederseniz, iç sınıf dış sınıfın bir üyesini kullanabiliyor. Yani, iç sınıftan bir nesne oluşturulabilmesi için, öncelikle bir dış sınıf nesnesi gerekiyor.
Bu, C++'da böyle değildir; iç sınıf açısından bakıldığında, dış sınıf yalnızca bir isim alanı belirler. Örneğin içteki sınıfın uzun ismi DisSinif::IcSinif'tır.
D'de ise iç sınıf, bir dış nesneye bağlı oluyor ve ancak o nesne tarafından oluşturulabiliyor:
import std.stdio; void main() { auto dış = new DışSınıf; auto görevli1 = dış.new Görevli; auto görevli2 = dış.new Görevli; görevli1.çalış(); görevli1.çalış(); görevli2.çalış(); dış.bilgiVer(); }
Oradaki dış.new kullanımından haberim yoktu!

O programda iki tane iç nesne oluşturuluyor ve ikisi de tek dış nesneyi kullanıyorlar. Sonuçta program "3 işlem yapıldı" yazıyor.
C++'daki gibi olması istenirse, iç sınıfın başına static yazılıyor:
static class Görevli
Tabii o zaman dış nesneye bağlantı diye bir kavram olmuyor. Yani ++işlemSayacı; çalışamaz.
Ali
acehreli
Show profile
Link to this post
