
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Soru. Belirli bir parametre seti ve türleri ile üst sınıfta bir sanal işlev bildirdikten sonra, alt sınıflardaki karşılık gelen sanal işlevler için parametre sayısını ve türünü değiştirmek mümkün müdür?
Bir yandan, Referans, " türetilmiş bir sınıfta sanal bir işlev geçersiz kılınabilir. Bir sanal işlev için hangi işlev tanımının çağrılacağı seçimi dinamiktir (çalışma zamanında). Tipik durum, temel sınıfın aşağıdakileri içermesidir , ve türetilmiş sınıfların bu işlevin kendi sürümleri vardır. Öte yandan, El Kitabında verilen örnekler, sanal işlevlerin işlev tanım başlıklarında değil, işlev tanım gövdelerinde farklılık gösterdiği durumlarla ilgilidir.
Hatırladığım kadarıyla. Ancak, parametre türleri ve sayısında kesinlikle bir zhoskoe farkına ihtiyacınız var.
Bu geçirilen değerlere ve varsayılan değerlere de dikkat etmelisiniz.
Basit olması için örnekler vereceğim.
Bu seçenek işe yarayacak
Böyle bir şey yok (ya da daha doğrusu yuvarlanabilir, ancak hatalar ve belirli çekincelerle)
Bir sınıfta RELOAD yöntemi varsa, kesinlikle aynı çöp oluşturulur.
Varsayılan seçenekler dışında tanımın tam bir kopyası (varsayılanlar değişebilir, ancak bunu kullanmamak en iyisidir)
İlginç , anladığım kadarıyla işlev sanallaştırma ve işlev aşırı yüklemesi biraz farklı şeyler. Ve mql5 , işlevleri sanallaştırırken, işlev başlığının basılı bir kopyasının olması gerektiğini söylüyor (varsayılan parametreleri hesaba katmıyorum).
İlginç , anladığım kadarıyla işlev sanallaştırma ve işlev aşırı yüklemesi biraz farklı şeyler. Ve mql5 , işlevleri sanallaştırırken, işlev başlığının basılı bir kopyasının olması gerektiğini söylüyor (varsayılan parametreleri hesaba katmıyorum).
> Soru. Belirli bir parametre seti ve türleri ile üst sınıfta bir sanal işlev bildirdikten sonra, alt sınıflardaki karşılık gelen sanal işlevler için parametre sayısını ve türünü değiştirmek mümkün müdür?
Her şeyi doğru anlarsam, soyundan gelen, ataların işlevselliğini aşırı yüklemelidir.
Dürüst olmak gerekirse, sanal olanlarla benzer şeyler yapıp yapmadığımı hatırlamıyorum (sanırım yaptım), ancak aşırı yüklenmeyle ilgili ifade doğru - kendim bir kez bu komisyona bastım.
not
Her şey doğru yapılırsa, anladığım kadarıyla parametre sayısı hem artırılabilir hem de azaltılabilir. Zorluklar, parametre sayısı aynı kalırsa, ancak türleri değişirse olacaktır ...
Genel olarak, aşağıdaki örneği çizdim:
C_C sınıfındaki işlev yönteminin aşırı yüklenip yüklenmediğine bakılmaksızın, sanal bir işlevin yalnızca üç parametreyle çağrılabileceği ortaya çıktı - pointer.function(a1,a2,a3). Buna göre program, sanal işlevleri çağırırken hiçbir zaman C_C sınıfından iki parametreli yönteme ulaşmayacaktır. Doğru şekilde?
Temel olarak, işte bir örnek:
C_C sınıfındaki işlev yönteminin aşırı yüklenip yüklenmediğine bakılmaksızın, sanal bir işlevin yalnızca üç parametreyle çağrılabileceği ortaya çıktı - pointer.function(a1,a2,a3). Buna göre program, sanal işlevleri çağırırken hiçbir zaman C_C sınıfından iki parametreli yönteme ulaşmayacaktır. Doğru şekilde?
Programın __FUNCTION__ makrosu ile baskıları yapıcılara ve yıkıcılara ekleyerek ne yaptığını analiz edin, çok faydalı olacaktır.
Kendi adıma, bir temel sınıf işaretçisi bildirerek, alt sınıf aracılığıyla alt sınıflara bir "tünel" geçişi oluşturduğunuzu ekleyeceğim. Böylece, derleyici, soyundan gelenlere böyle bir çağrı ile, soyundan gelenlerde yalnızca temel sınıfta bildirilen işlevleri görecektir. Siz (aynı program içinde bile) doğrudan bir alt nesne bildirirseniz, tüm işlevler içinde kullanılabilir olacaktır.
Genel olarak, aşağıdaki örneği çizdim:
C_C sınıfındaki işlev yönteminin aşırı yüklenip yüklenmediğine bakılmaksızın, sanal bir işlevin yalnızca üç parametreyle çağrılabileceği ortaya çıktı - pointer.function(a1,a2,a3). Buna göre program, sanal işlevleri çağırırken hiçbir zaman C_C sınıfından iki parametreli yönteme ulaşmayacaktır. Doğru şekilde?
Kendi deneyimlerime göre, kodu tamamlamak için bu yolu önerebilirim
Ve bir örnek ve eğlence olarak, ekteki dosyayı görebilirsiniz.
İşaretçiler ve yeni ile ortalığı karıştırmak için bir av değildi, bu yüzden işçi sınıfını bir değişken olarak ilan ettim.
Zamanlayıcı Uzman Danışmanı, düzenli aralıklarla rastgele bir 0/1 sayısı üretir ve sonuca bağlı olarak iki işlevden birini gerçekleştirir: MarketBuy / MarketSell.
İstenirse böyle beyan etmek mümkündü.
Ama sonra bir çatışma hakkında bir hata ortaya çıkabilir
not
Acele yapıldı, bu yüzden bazı yanlışlıklar olabilir.
Ancak prensipte ana fikir anlaşılabilir.
Değerli ipuçlarınız ve tavsiyeleriniz için çok teşekkür ederiz ! Hem teori hem de pratik için yeterli zamanım olsaydı kesinlikle kullanacağım.
Kendi deneyimlerime göre, kodu tamamlamak için bu yolu önerebilirim
Neden tam olarak? tuzak nedir?
Eskiden böyle sorunlar oluyordu. Ama şimdi hangileri olduğunu hatırlamıyorum.
Genel olarak, buna alışkınım.
Genellikle, elbette, hiçbir fark yoktur, en azından benim örneğimde yerleri değiştirmeye çalıştım, her şey çalıştı ...
Eskiden böyle sorunlar oluyordu. Ama şimdi hangileri olduğunu hatırlamıyorum.