- Tiplerin Kapsüllenmesi ve Genişletilebilirliği
- Kalıtım
- Polimorfizm
- Aşırı Yükleme
- Sanal Fonksiyonlar
- Bir Sınıfın Statik Elemanları
- Fonksiyon Şablonları
- Şablon avantajları
- Soyut Sınıflar
Bir Sınıfın/Yapının statik üyeleri
Statik üyeler
Sınıf üyeleri, static bellek sınıfı şekillendiricisi kullanılarak bildirilebilir. Bu veri üyeleri sınıfın tüm örnekleri tarafından paylaşılır ve bir yerde depolanırlar. Statik olmayan veri üyeleri her bir sınıf nesnesi değişkeni için oluşturulurlar.
Statik üyelerin bildirilememesi, ilgili değişkenlerin global kapsamda bildirilmesini gerektirebilir. Bu, veri ile sınıf arasındaki ilişkiyi koparır ve NYP'nin temel paradigmasıyla (değişkenleri ve yöntemleri bir sınıfta bir araya getirme) uyumlu değildir. Statik üye, belirli bir örneğe özgü olmayan sınıf verisinin, sınıf çerçevesinde var olmasına izin verir.
Statik üye belirli örneğe bağlı olmadığından referansı şu şekilde olur:
sınıf_ismi::değişkenler |
Burada sınıf_ismi sınıfın, değişken ise sınıf üyesinin ismidir.
Gördüğünüz gibi, sınıfların statik üyelerine erişmek için kavram çözümleme operatörü :: kullanılır. Sınıf yöntemleri içinde bir statik üyeye erişim gerçekleştirdiğinizde, kavram operatörünün kullanımı isteğe bağlıdır.
Statik sınıf üyesinin istenen değerler ile açık şekilde başlatılması gerekir. Yani, üyenin bildirimi ve başlatımı global kapsamda yapılmalıdır. Statik üyelerin başlatma sırası, global kapsamdaki bildirimlerinin sırasına karşılık gelir.
Metin ayrıştırma için kullanılacak bir sınıfımız (CParser) olduğunu düşünelim ve işlenen kelime ve karakter sayısını hesaplamamız gereksin. Tek yapmamız gereken sınıf üyelerini statik olarak tanımlamak ve bunları global düzeyde başlatmaktır. Sonrasında sınıfın tüm örnekleri, kelime ve karakterlerin ortak sayaçlarını kullanacaktır.
//+------------------------------------------------------------------+
|
Bir statik sınıf üyesi const anahtar kelimesi ile bildirilebilir. Bunun gibi statik sabitler, global düzeyde ve 'const' anahtar kelimesiyle başlatılır:
//+------------------------------------------------------------------+
|
this İşaretçişi #
Anahtar sözcük this üstü kapalı şekilde bildirilmiş, kendisine (yöntemin uygulandığı bağlamda belirli bir sınıf örneğine) yönelik bir işaretçiyi belirtir. Sınıfın sadece statik olmayan yöntemlerinde kullanılabilir. 'this' işaretçisi gizli ve statik olmayan bir sınıf üyesidir.
Statik fonksiyonlarda sınıfın sadece statik üyelerine/yöntemlerine erişebilirsiniz.
Statik yöntemler
MQL5 dilinde static tipli üye fonksiyonları kullanılabilir. 'static' şekillendiricisi fonksiyonun sınıf içindeki bildiriminde dönüş tipinden önce yer almalıdır.
class CStack
|
const şekillendiricisi ile bildirilen yöntemler, sabit olarak isimlendirilir ve sınıftaki gizli üyeleri şekillendiremezler. Sınıfın sabit fonksiyonları ve sabit parametrelerinin bildirimi const-correctness (sabit doğruluk) kontrolü olarak adlandırılır. Bu kontrol sayesinde derleyicinin nesne değerlerinin kararlılığını temin edeceğine ve yanlış bir şey varsa, derleme sırasında bir hata dönüşü yapacağına emin olabilirsiniz.
const şekillendiricisi, sınıf bildirimlerinde argüman listesinden sonra gelir. Sınıf dışındaki tanımlar da, aynı şekilde const şekillendiricisini içermelidir:
//+------------------------------------------------------------------+
|
Sabitlik kontrolü kullanmanın bir diğer faydası da, derleyicinin bu durumda özel bir optimizasyon oluşturmasıdır. Örneğin, sabit nesneyi salt okunabilir hafızaya yerleştirir.
Statik fonksiyonlar const şekillendiricisi ile belirlenemez; çünkü bu şekillendirici, fonksiyon çağrıldığı zaman örnek üyelerinin sabitliğini garanti eder. Ama yukarıda da belirtildiği gibi statik fonksiyon statik olmayan sınıf üyelerine erişemez.
Ayrıca Bakınız
Statik Değişkenler, Değişkenler, Referanslar: Şekillendirici & ve Anahtar Sözcük this