MQL5'te OOP hakkında sorular - sayfa 86

 
Igor Makanu :

mantıklı

ama bütün meselenin statik yöntemlerle kullanmak olduğundan şüpheleniyorum

test etmen gerek ama nasıl olduğunu anlamadım o yüzden sordum


UPD: Dün bu konuyu hızlıca google'da arattım, özel bir yıkıcıdan pek çok söz var, bu yüzden bunun ne verebileceğini düşünmelisin

Statik yöntemlerin bir this işaretçisi yoktur ve bu işaretçi aracılığıyla hiçbir şey yapamaz.

Özel bir yıkıcı, bir nesnenin silinmesinin nesnenin kendisi tarafından yapılacağını garanti eder. Ancak, yukarıda söylediğim gibi - bence, bu kaçınılması gereken iyi bir uygulama değildir (bazen oldukça uygun olmasına ve BAZI durumlarda kullanılması kabul edilebilir olmasına rağmen).

 
Georgiy Merts :

Statik yöntemlerin bir this işaretçisi yoktur ve bu işaretçi aracılığıyla hiçbir şey yapamaz.

belki mesajınızı anlamadım, ancak yöntemin this işaretçisine sahip olmadığının, yalnızca nesne örneğinin kendisinin sahip olduğunun farkındayım, yazdı çünkü sınıf alanları statik yöntemden elde edilebilir ve büyük olasılıkla kaldırma işlemini manipüle etmek mümkündür.

amaç bu tasarıma bakmak iken ben hiç denemedim ve yaygın bir yöntem değil


Sergey Dzyublik :

1) Statik yöntemlerden buna erişim yasaktır.
"Delete & this;" dedikleri yerde - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Özel bir yıkıcı, yığın üzerinde bir nesne oluşturmayı yasaklar, ancak daha önce olduğu gibi, yeni operatör aracılığıyla bu kez öbek üzerinde bir nesne oluşturulabilir:

İşte bir başka silme kullanımı &bu.

Teşekkürler, kontrol edeceğim




meşgul, hepsi onarımda, biraz sonra tekrar soracağım ... hazırlıksız, temel sınıfın bir yöntemi varsa ne olacak

 delete & this ;

ve temel sınıfın kaldırılmasıyla türetilmiş bir sınıftan bir yöntem çağırın .... pratik bir amaç yok, ama şimdilik bunu çözmek istiyorum

 
Igor Makanu :

belki mesajınızı anlamadım, ancak yöntemin this işaretçisine sahip olmadığının, yalnızca nesne örneğinin kendisinin sahip olduğunun farkındayım, yazdı çünkü sınıf alanları statik yöntemden elde edilebilir ve büyük olasılıkla kaldırma işlemini manipüle etmek mümkündür.

amaç bu tasarıma bakmak iken ben hiç denemedim ve yaygın bir yöntem değil


Teşekkürler, kontrol edeceğim




meşgul, hepsi onarımda, biraz sonra tekrar soracağım ... hazırlıksız, temel sınıfın bir yöntemi varsa ne olacak

ve temel sınıfın kaldırılmasıyla türetilmiş bir sınıftan bir yöntem çağırın .... pratik bir amaç yok, ama şimdilik bunu çözmek istiyorum

Endişelenme, buna asla ihtiyacın olmayacak.

Bu tür şeylerle uğraşmadan önce, dilin temellerini anlamanız gerekir.

 
Koldun Zloy :

Endişelenme, buna asla ihtiyacın olmayacak.

Bu doğru bir ifade değil, ufkunuzu genişletmezseniz, elbette ihtiyacınız olmayacak.

Koldun Zloy :

Bu tür şeylerle uğraşmadan önce , dilin temellerini anlamanız gerekir.

Mümkün olduğunca çözüyorum, genel olarak MQL görevlerinin %90'ından fazlasını anında çözüyor olsam da, görevler genellikle tipiktir ve görevlerin çoğu zaten çözülmüştür ve ücretsiz olarak kullanılabilir



silme hakkında &bu; ... kendisi açılışı izleyen ve yeniden teklifler sırasında bir sipariş açmayı deneyebilecek bir sınıf emri verdi ... ve daha birçok şey,

bu nesneyi (sınıf düzeni) başka bir sınıftan yarattı ve sildi, deneyeceğim, belki sil & this ; kullanmak daha uygun olacaktır

 

Bunun bir aksaklık mı yoksa bir özellik mi olduğunu merak ediyorum)

Bir sınıfın örneğinin içinde bir yapı bulunur.

Yapının içeriğini görmek için bir son verdim.
Ancak yalnızca köşeli parantez koyarsanız görüntülenir.
Yapı bir durumda olmasına rağmen.

sınıf dizinin bir elemanı değilse sorun çözülür.




peki, "dürtme" kodu

 class ABC
{   
   public :         
           struct ST
           {    
               int r;
               int U;
                  ST() {r= 0 ; U= 0 ;}           
           };
           ST st;
};
ABC abc[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {

abc[ 0 ].st.r;

   return ( INIT_SUCCEEDED );
  }
 
Pavel Verveyko :

Bunun bir aksaklık mı yoksa bir özellik mi olduğunu merak ediyorum)

Bir sınıfın örneğinin içinde bir yapı bulunur.

Yapının içeriğini görmek için bir son verdim.
Ancak yalnızca köşeli parantez koyarsanız görüntülenir.
Yapı bir durumda olmasına rağmen.

sınıf dizinin bir elemanı değilse sorun çözülür.




peki, "dürtme" kodu

bu muhtemelen daha iyi :-)

 
Maxim Kuznetsov :

bu muhtemelen daha iyi :-)

belki) ama ipucunun özünü değiştirmez)

 
Pavel Verveyko :

Bunun bir aksaklık mı yoksa bir özellik mi olduğunu merak ediyorum)

Bir sınıfın örneğinin içinde bir yapı bulunur.

Yapının içeriğini görmek için bir son verdim.
Ancak yalnızca köşeli parantez koyarsanız görüntülenir.
Yapı bir durumda olmasına rağmen.

sınıf dizinin bir elemanı değilse sorun çözülür.




peki, "dürtme" kodu

Başka bir editör hatası
 

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html

Везде, где это возможно, заменяйте глобальные переменные локальными.

Global değişkenlere erişmek, yerel değişkenlere erişmekten daha fazla komut gerektirir. Ayrıca aksi açıkça belirtilmedikçe derleyici, çağrılan altyordamın tüm global değişkenlerin değerlerini değiştirebileceğini varsayar. Böylece, bir alt program çağrısından sonra, tüm global değişkenlerin değerleri belleğe yeniden yüklenir ve bu da performansın düşmesine neden olur.


Genel bir değişkene (bu ve diğer diziler arasında paylaşılan bir değişken olmayan) erişmeniz gerekiyorsa, değerini yerel bir değişkene kopyalayın ve kopyayla çalışın.

Yerel bir kopya kullanmanın, global değişkene yalnızca bir kez erişilmesi dışında bir performans avantajı vardır.


eğer benim örneğimde:

 class CEA
{
private :
   double             _Ask, _Bid;
public :
   void               onTick( const MqlTick &tick);
};
//+------------------------------------------------------------------+
void CEA::onTick( const MqlTick &tick)
{
   _Ask = tick.ask;
   _Bid = tick.bid;
}

onTick() yöntemindeki ask ve bid değerlerini kopyalayacağım ve diğer yöntemlerde _Ask, _Bid kullanacağım (sanal ticaret)

global değişkenlerle çalışmaya benzer mi?

Not: bir seçenek olarak, elbette, tüm yöntemlere atıfta bulunarak geçebilir ve işaretleyebilirim, ancak yine, neyin daha verimli olduğuyla ilgili sorular

 
Igor Makanu :

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


eğer benim örneğimde:

onTick() yöntemindeki ask ve bid değerlerini kopyalayacağım ve diğer yöntemlerde _Ask, _Bid kullanacağım (sanal ticaret)

global değişkenlerle çalışmaya benzer mi?

Not: bir seçenek olarak, elbette, tüm yöntemlere atıfta bulunarak geçebilir ve işaretleyebilirim, ancak yine, neyin daha verimli olduğuyla ilgili sorular

Igor Makanu :

https://www.ibm.com/support/knowledgecenter/ru/ssw_aix_72/performance/coding_style_best_perf.html


eğer benim örneğimde:

onTick() yöntemindeki ask ve bid değerlerini kopyalayacağım ve diğer yöntemlerde _Ask, _Bid kullanacağım (sanal ticaret)

global değişkenlerle çalışmaya benzer mi?

Not: bir seçenek olarak, elbette, tüm yöntemlere atıfta bulunarak geçebilir ve işaretleyebilirim, ancak yine, neyin daha verimli olduğuyla ilgili sorular

Soru. Ve bir keçi neden bir düğme akordeonuna ihtiyaç duyar? Bir yöntemde, bir sınıfta, küresel bir atta, ancak fiziksel bir boşlukta (iyi, sarhoşum))), o zaman evet, mantıklı. Ve gerçek bir projede ise, ya küresel düzeyde bir sınıf ya da tüm bu trichomudin'i işleyen bir yalnız (fazladan bourbon için üzgünüm))))) işleyicinin başında ve doğrudan herhangi bir yerden talep edin) ))