Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 245

 
Nikolai Semko # : https://www.mql5.com/ru/forum/170952/page243#comment_52244665

Sorun ne burada?
Muhtemelen eski mesajlara bakıyorsunuz ve ileriye bakamayacak kadar tembelsiniz.

Üzgünüm, belki de google otomatik çeviriden dolayı

 

Resimdeki soru şu:

kod:
class C_AO_Agent
{
public:
    double c[];
    double f;
};

class C_AO
{
public:
    double cB[];
     C_AO_Agent *a;

    virtual void Init() { }
};

class C_Agent : public C_AO_Agent
{
public:
    double g;
    
    class ad
    {
    
    };
};

class C_P : public C_AO
{
public:
    void Init()
    {
      a = new C_Agent;
      a.f = 5;
    }
};

void OnStart()
{
    C_AO *ao;
    ao = new C_P;
    ao.Init();
}
 
Andrey Dik #:

Resimdeki soru şu:

kod:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum.

mql5 dilinin özellikleri, incelikleri ve çalışma teknikleri

Andrey Dik, 2024.02.16 06:05

class C_AO_Agent
{
public:
    double c[];
    double f;
};

class C_AO
{
public:
    double cB[];
     C_AO_Agent *a;

    virtual void Init() { }
};

class C_Agent : public C_AO_Agent
{
public:
    double g;
    
    class ad
    {
    
    };
};

class C_P : public C_AO
{
public:
    void Init()
    {
      a = new C_Agent;
      a.f = 5;
    }
};

void OnStart()
{
    C_AO *ao;
    ao = new C_P;
    ao.Init();
}

Temel sınıfın torunların alanlarına erişimi yoktur.

 
fxsaber #:

Temel sınıfın torun alanlarına erişimi yoktur.

Evet, ama ben bunu şu şekilde yendim:

class C_AO_Agent
{
public:
    double c;
    double f;
};

class C_AO
{
public:
    double cB[];
     C_AO_Agent *a;

    virtual void Init() { }
};

class C_Agent : public C_AO_Agent
{
public:
    double g;
    
    class ad
    {
    
    };
};

class C_P : public C_AO
{
public:
    void Init()
    {
      a = new C_Agent;
      C_Agent *agent = (C_Agent*)a; // Приведение типов
      agent.f  = 5;
      agent.g  = 7;                 //теперь есть доступ к g!!!
      agent.c  = 8;
    }
};

void OnStart()
{
    C_AO *ao;
    ao = new C_P;
    ao.Init();
    
    //тут нам нужен доступ только к f и c
    Print (ao.a.f);
    Print (ao.a.c);
    
    // Удаление объектов
    delete ((C_Agent*)ao.a);
    delete ao;
}
bu, gerekli olanın çalışan bir versiyonudur.
 
Andrey Dik #:
evet, ama bu şekilde yenildi:

gerekli olanın çalışan bir sürümüdür.
Çok hatalı.
OnStart yönteminde, yalnızca C_P sınıfının Init yönteminde bilinen bir tür belirtmelisiniz.
Bence C_P için Deinit() eklemek daha iyi olur.
 
Sergey Gridnev #:
Bu çok hatalı.
OnStart yönteminde, yalnızca C_P sınıfının Init yönteminde bilinen türü belirtmek gerekir.
C_P için Deinit() işlevini eklemenin daha iyi olacağını düşünüyorum.
Bana bir örnek gösterin, herkes bir sanatçıyı rencide edebilir)
 
Andrey Dik #:
Bana bir örnek gösterin
class C_AO_Agent
{
public:
    double c;
    double f;
};

class C_AO
{
public:
    double cB[];
     C_AO_Agent *a;

  C_AO( void ) : a(NULL) {}
  
  ~C_AO( void )
  {
    this.Init();
  }

    virtual void Init()
    {
      if (::CheckPointer(this.a) == POINTER_DYNAMIC)
        delete this.a;
    }
};

class C_P : public C_AO
{
protected:
  class C_Agent : public C_AO_Agent
  {
  public:
      double g;
      
      class ad
      {
      
      };
  } *agent;
  
public:
    C_P( void ) : agent(NULL) {}
    
    virtual void Init()
    {
      this.C_AO::Init();
            
      this.agent = new C_Agent;
      this.a = this.agent;
    }
};

void OnStart()
{
    C_AO *ao;
    ao = new C_P;
    ao.Init();
    
    //тут нам нужен доступ только к f и c
    Print (ao.a.f);
    Print (ao.a.c);
    
    // Удаление объектов
    delete ao;
}
 
Andrey Dik #:
Bir örnek gösterin, herkes bir sanatçıyı rencide edebilir).
Neyin örneği?
a geçerli bir nesne işaretçisi ise delete(a) çağrısı yapan bir sınıfa void Deinit(void) yöntemi nasıl eklenir?
Ya da OnStart() içinde ao.Deinit() nasıl yazılır?
;)
 
Sergey Gridnev #:
Neyin örneği?
a bir nesnenin geçerli bir işaretçisi ise delete(a) çağrısı yapan bir sınıfa void Deinit(void) yöntemini nasıl eklersiniz?
Ya da OnStart() içinde ao.Deinit() nasıl yazılır?
;)

Görev, nesnelerin doğru şekilde silinmesini organize etmek değil, bir nesneye erişim sağlamaktı. Silmek her zaman yaratmaktan daha kolaydır))

 
fxsaber #:
Teşekkürler, bu ilginç.