Alıntı (esatarslan52):
> http://www.digitalmars.com/d/archives/digitalmars/D/learn/Multiple_Inheritance_Mixins_and_Constructors_16628.html
Burdaki örnekte bir class'ı ve interface'i aynı anda miras olarak almış. Ben bunu iki class için denediğim de de "ikinci interface olmalı" gibisinden hata veriyo. Interface tam olarak ne amaçla kullanılıyo onu anlamadım açıkcası.
Çoklu kalıtımla ilgili söylediğimi düzeltiyorum. D çoklu kalıtımı şu şekilde destekliyormuş:
Alıntı:
> 'D'nin nesne yönelimliliği Java ve C#'ınkine benzer: gerçekleştirme olarak tekli, arayüz olarak çoklu kalıtım... '
class GereçÜstSınıfı { ... }
class Alet { ... }
class Gereç : GereçÜstSınıfı, Arayüz1, Arayüz2
{
Alet Alet_döndür() { ... }
alias Alet_döndür this; // Gereç Alet'ten türemiş olur
}
Bu kısmı da Andrei Alexandrescu'nun Neden D makalesi (http://ddili.org/makale/neden_d.html) Nesne Yönelimli Olanaklar kısmından aldım.
Bir de C++'den hatırladığım kadarıyla çoklu kalıtım o kadar yaygın olarak kullanılmaz. Genelde kütüphane içlerinde ve kullanımı azdır. Belki ne yapmaya çalıştığını ve yazdığın örnek kodu yazarsan çoklu kalıtıma gerek duymayan bir çözüm bulabiliriz.
Arabirimler (interfaces) benim için de yeni bir kavram..
Arabirimler bir dizi işlevden oluşuyor. Arabirimler sınıflardan türetilemiyor, sadece diğer arabirimlerden türetiliyor. Bir sınıf bir arabirimi birden fazla devralamıyor.
interface D
{
void foo();
}
class A : D, D // hata
{
}
Bir arabirime ait bir örnek (nesne) oluşturamıyoruz.
interface D
{
void foo();
}
..
D d = new D(); // hata, bir arabirime ait örnek oluşturulamaz
Bir arabirime ait üye işlevde gerçekleştirmeye izin verilmiyor.
interface D
{
void bar() { } // hata, gerçekleştirmeye izin verilmez.
}
Arabirimin gerçeklemesini bu arabirimden devralan sınıflarda tanımlıyormuşuz:
interface D
{
void foo();
}
class A : D
{
void foo() { } // tamam gerçekleşmeyi sağlıyor
}
class B : D
{
int foo() { } // hata, void foo() şeklinde bir gerçekleme değil
}
Arabirimle ilgili konunun tamamı da bu adreste: http://www.digitalmars.com/d/1.0/interface.html
Alıntı (esatarslan52):
> Bir de c++ da olduğu gibi sınıf içinde fonksiyonun deklare edip sınıf dışında işlevini yazmak istedim fakat bir türlü başaramadım. Örneğin yatayÇiz() ve dikeyÇiz() fonksiyonlarını c++ da olduğu gibi sınıf dışında YatayÇiz::yatayÇiz() şeklinde ifade edip işlevini yazmam mümkün mü? Sitesinde aradım fakat her hangi birşey bulamadım.
C++'de genelde kullandığımız sınıf ve işlevlerin bildirimleri bir başlık dosyasına (.h uzantılı bir dosya) gidiyordu. Bunların tanımları da bir kaynak dosyasına (.c uzantılı bir dosya) (cpp,cc vs.. ) gidiyordu. Bunu da biz derleyici için yapıyorduk. Artık üye işlevlerin, statik üyelerin ayrı olarak bildirilmesine gerek olmadığı ve:
int ABC::func() { return 7; }
int ABC::z = 7;
extern int q;
gibi bir yazım şekline ihtiyaç kalmadığını söylüyor. Buradan ben D'de böyle bir şeye ihtiyaç kalmadığı için olmadığı anlamı çıkarıyorum. Tam olarak adresi de bu:
http://www.digitalmars.com/d/1.0/overview.html <-- Declaration vs Definition kısmında
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]