OOP. Başvuru soruları - sayfa 3

 

Teknik bağlantı. Sınıflarla çalışırken bir "sarma mekanizması" örneği (arama yoluyla arama yapmamak için):

https://www.mql5.com/ru/forum/3555/page3#comment_57315

Ограничение кеша индикатора.
Ограничение кеша индикатора.
  • www.mql5.com
Но вот нет никакой возможности ограничить автоматическую загрузку данных в кеш индикатора.
 

Soru. yeni operatör. El Kitabı, new'in bir operatör olduğunu söylüyor; dahası, örneklerde, genellikle bu işleci kullandıktan sonra, NULL sabitine eşitlik için bir kontrol yapılır. Örneğin:

 //+------------------------------------------------------------------+
//| Создание фигуры                                                  |
//+------------------------------------------------------------------+
void CTetrisField::NewShape()
  {
   m_ypos=HORZ_BORDER;
//--- случайным образом создаём одну из 7 возможных фигур
   int nshape= rand ()% 7 ;
   switch (nshape)
     {
       case 0 : m_shape= new CTetrisShape1; break ;
       case 1 : m_shape= new CTetrisShape2; break ;
       case 2 : m_shape= new CTetrisShape3; break ;
       case 3 : m_shape= new CTetrisShape4; break ;
       case 4 : m_shape= new CTetrisShape5; break ;
       case 5 : m_shape= new CTetrisShape6; break ;
       case 6 : m_shape= new CTetrisShape7; break ;
     }
//--- отрисовываем
   if (m_shape!= NULL )
     {
       //--- начальные установки
      m_shape.SetRightBorder(WIDTH_IN_PIXELS+VERT_BORDER);
      m_shape.SetYPos(m_ypos);
      m_shape.SetXPos(VERT_BORDER+SHAPE_SIZE* 8 );
       //--- отрисуем
      m_shape.Draw();
     }
//---
  }

Ayrıca " NULL , yeni operatörle oluşturulan nesnelere yönelik işaretçilerle karşılaştırılabilir" diyor.

Yeni operatörün her zaman yeni bir nesne oluşturmadığı ortaya çıktı mı? Yoksa oluşturulan nesnenin NULL değerine eşit olup olmadığının kontrolü şu veya bu programcının stilinin bir özelliği midir ve zorunlu değil midir?

 
Yedelkin :

Soru. yeni operatör. El Kitabı, new'in bir operatör olduğunu söylüyor; dahası, örneklerde, genellikle bu işleci kullandıktan sonra, NULL sabitine eşitlik için bir kontrol yapılır. Örneğin:

Ayrıca " NULL , yeni operatörle oluşturulan nesnelere yönelik işaretçilerle karşılaştırılabilir" diyor.

Yeni operatörün her zaman yeni bir nesne oluşturmadığı ortaya çıktı mı? Yoksa oluşturulan nesnenin NULL değerine eşit olup olmadığının kontrolü şu veya bu programcının stilinin bir özelliği midir ve zorunlu değil midir?

Programın bir yerinde dinamik bir nesne yaratırsanız, onu başka bir yerde yok etmeniz mantıklıdır ve hepsinin aynı fonksiyon içinde olduğu bir gerçek değildir, bu nedenle işaretçiyi kullanmadan önce basit kural, kontrol edin. var.
 
Urain :
Programın bir yerinde dinamik bir nesne yaratırsanız, onu başka bir yerde yok etmeniz mantıklıdır ve hepsinin aynı fonksiyon içinde olduğu bir gerçek değildir, bu nedenleişaretçiyi kullanmadan önce basit kural, kontrol edin. var.

Bu doğru. Ancak Referans kitabındaki örneklerde, kontrol nesne oluşturulduktan hemen sonra gerçekleştirilir, yani. programın tek bir yerinde ve tek bir işlev içinde. Ve yukarıdaki kural burada pek doğru değil. Nesne oluşturulduktan hemen sonra kontrol ne için yapılır? Yani yeni operatör her zaman yeni bir nesne yaratmaz mı? =(tekrar)=

İşte birçoğunun başka bir örneği:

 //--- example for CArrayString::Add(string)
#include <Arrays\ArrayString.mqh>
//---
void OnStart ()
  {
   CArrayString *array= new CArrayString;
   //---
   if (array== NULL )
     {
       printf ( "Object create error" );
       return ;
     } 
 
Yedelkin :

Bu doğru. Ancak Referans kitabındaki örneklerde, kontrol nesne oluşturulduktan hemen sonra gerçekleştirilir, yani. programın tek bir yerinde ve tek bir işlev içinde. Ve yukarıdaki kural burada geçerli değildir. Nesne oluşturulduktan hemen sonra kontrol ne için yapılır? Yeni operatörün her zaman yeni bir nesne oluşturmadığı ortaya çıktı (tekrar)?

İşte birçoğunun başka bir örneği:

Böyle bir olasılık var. İlk paragrafta yardım edin.
 
Lizar :
Böyle bir olasılık var. İlk paragrafta yardım edin.
TAMAM. Operatörün davranışının bir fonksiyonun davranışına benzediği ortaya çıktı. Oluşturulabilir veya oluşturulmayabilir.
 
Yedelkin :
TAMAM. Operatörün davranışının bir fonksiyonun davranışına benzediği ortaya çıktı. Oluşturulabilir veya oluşturulmayabilir.
Örneğin, nesne için yeterli bellek yoktu.
 
Rosh :
Örneğin, nesne için yeterli bellek yoktu.
Burada bazen basit bir açıklama, kişinin ufkunu önemli ölçüde genişletmeye yardımcı olur. Teşekkür ederim!
 

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.

 
Yedelkin :

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?

Varsayılan seçenekler dışında tanımın tam bir kopyası (varsayılanlar değişebilir, ancak bunu kullanmamak en iyisidir)