MQL5'te OOP hakkında sorular - sayfa 7

 
Dmitry Fedoseev :

Nesne sayısı önceden biliniyorsa ve program çalışması sırasında sabitse, yenisine gerek yoktur. Diğer tüm durumlarda - yeni.

tahmin etmedim, işte örneğim https://www.mql5.com/en/forum/160683/page861#comment_11840254

yapıcıya parametreleri iletmenin uygun olduğu ve kullanıcı ayarları değiştirmişse, sınıfı OnDeinit() içinde öldürmek ve ardından yeni parametrelerle OnInit() içinde oluşturmak daha hızlıdır.

;)

 
Igor Makanu :

tahmin etmedim, işte örneğim https://www.mql5.com/en/forum/160683/page861#comment_11840254

parametreleri yapıcıya aktarmanın uygun olduğu yerde ve kullanıcı ayarları değiştirmişse, sınıfı OnDeinit()'te öldürmek ve ardından yeni parametrelerle OnInit()'te oluşturmak daha hızlıdır.

;)

Parametreler yapıcıya yeni olmadan iletilebilir.

 
Dmitry Fedoseev :

Parametreler yapıcıya yeni olmadan iletilebilir.

ve? ve sınıf alanlarını nasıl değiştireceksiniz (kullanıcı EA ayarlarını değiştirdi)? - bir yöntem daha yazacak mısın? Daha fazlası için son sayfadasın"   işaretçi için bir değişken. "savaştı ve işte bütün bir yöntem!

;)

 
Igor Makanu :

ve? ve sınıf alanlarını nasıl değiştireceksiniz (kullanıcı EA ayarlarını değiştirdi)? - bir yöntem daha yazacak mısın? Daha fazlası için son sayfadasın"   işaretçi için bir değişken. "savaştı ve işte bütün bir yöntem!

;)

 input int a1= 1 ;
input int a2= 2 ;

class CX{
   public :
   void CX( int a, int b){
   
   }
};

CX cx(a1,a2);
 
Dmitry Fedoseev :

gitmeyecek ;)

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
input int a1= 1 ;
input int a2= 2 ;
//+------------------------------------------------------------------+
class CX
  {
public :
   int a1,a2;
   void CX( int a, int b) {a1=a;a2=b; }
  };
CX cx(a1,a2);  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
       Comment ( "cx.a1 = " ,cx.a1, "\ncx.a2 = " ,cx.a2);
  }
//+------------------------------------------------------------------+

danışman ayarlarını değiştir

 
Igor Makanu :

gitmeyecek ;)

danışman ayarlarını değiştir

Soğuk pusu.

Ancak, sadece parametrelerden dolayı yeni kullanmak yerine, parametreleri değiştirmek için bir yöntem eklemeyi tercih ediyorum.
 
Dmitry Fedoseev :

Soğuk pusu.

Ancak, sadece parametrelerden dolayı yeni kullanmak yerine, parametreleri değiştirmek için bir yöntem eklemeyi tercih ediyorum.

yeni - batıl inanç kullanmamak? )))

IMHO, uygunsa, kullanmanız gerekir! - 2 tıklamadaki örneğiniz new kullanılarak yeniden yazılacak ve her şey düzgün çalışacak ve kullanıcı ayarları değiştirdiğinde durumu ele alacaktır

 #property strict
input int a1= 1 ;
input int a2= 2 ;
//+------------------------------------------------------------------+
class CX
  {
public :
   int a1,a2;
   void CX( int a, int b) {a1=a;a2=b; }
  };
CX *cx;
//+------------------------------------------------------------------+
int OnInit ()
  {
   cx = new CX(a1,a2);
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   delete cx;
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
       Comment ( "cx.a1 = " ,cx.a1, "\ncx.a2 = " ,cx.a2);
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

yeni - batıl inanç kullanmamak? )))

IMHO, uygunsa, kullanmanız gerekir! - 2 tıklamadaki örneğiniz new kullanılarak yeniden yazılacak ve her şey düzgün çalışacak ve kullanıcı ayarları değiştirdiğinde durumu ele alacaktır

Batıl inanç değil, sadece tembellik, koşullar nedeniyle tarihsel olarak kurulmuş. Delete yazmak ve bunu Deinit () içinde yapmak gerekir. Ancak Deinit() işlevi varsayılan olarak şablonda değildi. Şimdi bakıyorum - EA şablonunda Deinit() var, ama daha önce orada değildi.

 
Dmitry Fedoseev :

Batıl inanç değil, sadece tembellik, koşullar nedeniyle tarihsel olarak kurulmuş. Delete yazmak ve bunu Deinit () içinde yapmak gerekir. Ancak Deinit() işlevi varsayılan olarak şablonda değildi. Şimdi bakıyorum - EA şablonunda Deinit() var, ama daha önce orada değildi.

silme yazmayın - her şey düzgün çalışacak, bu günah (batıl inançtan bahsediyorum))) terminali devralacak ve "48 bayt sızdırılmış bellek" günlüğünde mırıldanacak, ardından "CX türünde 2 nesne kaldı" ve "silinmemiş nesneler kaldı"

Not: Gösterge oluşturma şablonunda Deinit() yok - can sıkıcı

 
Igor Makanu :

silme yazmayın - her şey düzgün çalışacak, bu günah (batıl inançtan bahsediyorum))) terminali devralacak ve "48 bayt sızdırılmış bellek" günlüğünde mırıldanacak, ardından "CX türünde 2 nesne kaldı" ve "silinmemiş nesneler kaldı"

Not: Gösterge oluşturma şablonunda Deinit() yok - can sıkıcı

Silmeden çalışacak, ama ne anlamı var. Ancak terminal bu sorunu üstleniyor mu? Yalnızca bellek sızıntılarını bildirir, ancak aynı nesneleri ayırmaz.

Neden: