Metindeki kaynak kodu ekteki dosyalarla uyumlu hale getirilmelidir, özellikle GetCriticalError_Unsafe.mq5 listesinde pstatus yerine (dosyadaki gibi) var olmayan status değişkenine atıfta bulunulmaktadır.
Ve CShape ardıl sınıflarının her birinde kendi değişken tipini tanımlamanın anlamı nedir?
Ayrıca bununla ilgili açıklamaları da duymak isterim. GetCriticalError_OnDemand örneğinden GetCriticalError_Unsafe'e geçerken, tüm değişiklik pratik olarak işlev argümanının türünü CHello *pobject'ten CHello &pobject'e değiştirmeye indirgenmiştir. Aynı zamanda, fonksiyon çağrısı değişmeden kaldı - bir işaretçi (CHello *) oraya aktarıldı. Bu durumda, yazarın sözlerine göre,"yine kritik bir hata alıyoruz. Mesele şu ki, bir nesne referansla aktarılırsa, kritik hata, başlatılmamış bir nesnenin içine aktarıldığı bir işlevin çağrılması aşamasında ortaya çıkar". Ancak bu durumda işleve aktarılan bir referans değil, bir işaretçidir. Soru bunun nereden kaynaklandığıdır. Lütfen MQL5 tarafından işaretçilerin referanslara ve geri dönüşüme örtük olarak dönüştürülmesi için kullanılan kuralları detaylandırabilir misiniz? Ya da dokümantasyonda bunun açıklandığı yeri gösterir misiniz? Derleyici katı tiplemeyi destekleseydi, örnek, gerekli tipte bir argümana sahip bir fonksiyonun olmaması nedeniyle basitçe derlenemezdi.
Metindeki kaynak kodu ekteki dosyalarla uyumlu hale getirilmelidir, özellikle GetCriticalError_Unsafe.mq5 listesinde pstatus yerine (dosyadaki gibi) var olmayan bir status değişkenine atıfta bulunulmuştur.
Teşekkürler, makalede ve dosyada düzeltildi.
CShape ardıl sınıflarının her birinde kendi tip değişkenini tanımlamanın anlamı nedir?
Bu konuda da bazı açıklamalar duymak isterim. GetCriticalError_OnDemand örneğinden GetCriticalError_Unsafe'e geçerken, tüm değişiklik pratik olarak işlev argümanının türünü CHello *pobject'ten CHello &pobject'e değiştirmeye indirgenmiştir. Aynı zamanda, fonksiyon çağrısı değişmeden kaldı - bir işaretçi (CHello *) oraya aktarıldı. Bu durumda, yazarın sözlerine göre,"yine kritik bir hata alıyoruz. Mesele şu ki,bir nesne referansla aktarılırsa, kritik hata, başlatılmamış bir nesnenin aktarıldığı bir işlevin çağrılması aşamasında ortaya çıkar". Ancak bu durumda, işleve bir referans değil, bir işaretçi aktarılır. Bunun nereden kaynaklandığı sorusu ortaya çıkıyor. Lütfen MQL5 tarafından işaretçilerin referanslara ve geri dönüşüme örtük olarak dönüştürülmesi için kullanılan kuralları detaylandırabilir misiniz? Ya da dokümantasyonda bunun açıklandığı yeri gösterir misiniz? Eğer derleyici katı tiplemeyi destekleseydi, örnek basitçe derlenemezdi çünkü gerekli tipte bir argümana sahip bir fonksiyon yoktur.
Prensip olarak, bu üye hiçbir yerde kullanılmaz, kaldırabilirsiniz. Teorik olarak, nesne türüne bağlı işlevleri uygulamak için torunlarda kullanılabilir.
Bir parametreyi işaretçi olarak kabul eden bir işlev açıkça tanımlanmışsa, bu işlev kullanılır. Böyle bir işlev yoksa, nesnenin işaretçisi otomatik olarak nesneye bir referansa dönüştürülür ve nesneyi referans olarak kabul eden işlev kullanılır.
Referanslar ve işaretçiler üzerinde gerçekleştirilen örtük dönüşümlerin yönü hakkında okuyabileceğim bir yer var mı? Özellikle, bir referanstan bir işaretçiye ters dönüşüm de yapılıyor mu?

- www.mql5.com
Örneğin mevcut kaynağına göre, belirli bir tipteki bir şeklin nesnesinde CShape::type'a ek olarak CLine::type gibi iki tip değişkeni olduğunu "tırmık" aldığımızı doğru anlıyor muyum? İdeal olarak bir tane olmalıdır - temel sınıftan.
Evet, haklısınız. Yazdığınız gibi her alt sınıfta iki tip değişkeni var. Torunların kodu kopyalandığı için bu şekilde oldu. Temel sınıfın bir üyesini doğrudan torunların kullanımına açmak için protected belirteci ile tanımlanmalı veya bu üye için public get ve set metotları temel sınıfta bildirilmelidir.
Örneğin, şu şekilde:
//+------------------------------------------------------------------+ //|demo_inheritance.mq5 | //| Telif Hakkı 2010, MetaQuotes Software Corp. | | //|http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ class CBase { private: int type; public: CBase(){type=0;} int GetType(){return(type);} }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ class CSon: CBase { private: int type; public: CSon(){type=2;} void PrintType(); }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void CSon::PrintType() { Print("CSon.type =",type); Print("CBase.type =",CBase::GetType()); } //+------------------------------------------------------------------+ //| Komut dosyası programı başlatma işlevi| //+------------------------------------------------------------------+ void OnStart() { //--- CSon son; son.PrintType(); int father_type=son.GetType(); } //+------------------------------------------------------------------+
"Bu örnek çok basittir, içinde bir hata bulmak zor değildir. Ancak mql5-programınız yüzlerce hatta binlerce satır içeriyorsa, bu tür hataları yakalamak çok daha karmaşık hale gelebilir. Özellikle programın davranışındaki anormal durumların koşullarının öngörülemeyen faktörlere bağlı olduğu durumlar için - örneğin, belirli bir pazarda."
Nasıl?:-)

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale Nesne işaretleyicilerini MQL5'te Kullanma yayınlandı:
Varsayılan olarak, MQL5'teki tüm nesneler referansla iletilir, ancak nesne işaretçilerini kullanma olasılığı vardır. Ancak, nesne başlatılmamış olabileceğinden, işaretçi denetiminin gerçekleştirilmesi gereklidir. Bu durumda MQL5 programı kritik bir hata ile sonlandırılır ve kaldırılır. Otomatik olarak oluşturulan nesneler böyle bir hataya neden olmaz, dolayısıyla bu anlamda oldukça güvenlidirler. Bu makalede, nesne referansı ile nesne işaretçisi arasındaki farkı anlamaya çalışacağız ve işaretçileri kullanan güvenli kodun nasıl yazılacağını ele alacağız.
MQL5'te, kodunuzda sınıf türü değişkenlerin daha fazla kullanımı için kendi sınıfınızı oluşturabilirsiniz. MQL5'te MQL5’te Nesne Oluşturma ve Silme Düzeni makalesinden zaten bildiğimiz gibi, yapılar ve sınıflar iki şekilde oluşturulabilir - otomatik ve dinamik olarak.
Otomatik olarak bir nesne oluşturmak için bir sınıf türü değişkeni bildirmeniz yeterlidir - sistem bunu otomatik olarak oluşturacak ve başlatacaktır. Dinamik olarak bir nesne oluşturmak için yeni operatörünü nesne işaretçisine açıkça uygulamak gerekir.
Ancak, otomatik ve dinamik olarak oluşturulan nesneler ile nesne işaretçisini zorunlu olarak kullanmamız gerektiğinde ve nesneleri otomatik olarak oluşturmak yeterli olduğu zaman arasındaki fark nedir? Bu konu bu makalenin konusudur. İlk olarak, nesnelerle çalışırken bazı olası tehlikeleri tartışalım ve bunları düzeltmenin yollarını düşünelim.
Yazar: MetaQuotes