MQL5'te OOP hakkında sorular - sayfa 84

 
Pavel Verveyko :
Sınıfın genel bölümünde statik bir dizi bildirmek ve onu yapıcıda başlatmak mümkün müdür? (aşağıdaki gibi) (veya sadece eleman eleman mı?)

olabilmek

belki hala statik bir dizinin başlatılmasını mı arıyorsunuz?

 class A
{
public :
   static bool Mass[ 5 ];
               A() { ArrayPrint (Mass); }
};

static bool A::Mass[ 5 ] = { false , true , false , true , true };
//+------------------------------------------------------------------+
void OnStart ()
{
   A a;
}
//+------------------------------------------------------------------+
 
Pavel Verveyko :
sınıfın genel bölümünde statik bir dizi bildirmek ve onu yapıcıda başlatmak mümkün müdür? (aşağıdaki gibi) (veya sadece eleman eleman mı?)

Aşağı yukarı şöyle:

 class A{
   protected :
       static int x[];
       int my[];
   public :
      A(){
         ArrayCopy (my,x);
      }   
};

int A::x[]={ 1 , 2 , 3 , 4 , 5 };

A a;
Genel olarak, FKÖ'nün bu yoksulluğu, arka planının parlaklığına karşı çarpıcıdır. Peki, neden değişkenler ve diziler bildirildiklerinde her zamanki gibi başlatılamıyor? Eminim teorisyenler şimdi benim bir aptal olduğumu kanıtlayan bir sürü teori öne sürüyorlar, ama yine de...
 
Sergey Dzyublik :

Yerel bir diziyi başlatabilir ve ilgili alan dizisine bir ArrayCopy gerçekleştirebilirsiniz:

Böyle bir fikir de vardı, herhangi bir sınıfın dışında küresel alana da yerleştirilebilir.
Daha da kolay, ama her şeyin OOP olmasını isterim))

 
Dmitry Fedoseev :

Aşağı yukarı şöyle:

Genel olarak, FKÖ'nün bu yoksulluğu, arka planının parlaklığına karşı çarpıcıdır. Peki, neden değişkenler ve diziler bildirildiklerinde her zamanki gibi başlatılamıyor ? Teorisyenlerin benim bir aptal olduğumu kanıtlayan birçok teori öne sürdüklerine şüphem yok, ama yine de...

Tamamen aynı düşünceye sahibim)) OOP kullanarak her yazdığımda.

 
Pavel Verveyko :

Böyle bir fikir de vardı, herhangi bir sınıfın dışında küresel alana da yerleştirilebilir.
Daha da kolay, ama her şeyin OOP olmasını istiyorum))

 class CTest{
public :
   int a[ 4 ];
   CTest(){
       static int _a[]={ 1 , 2 , 3 , 4 };
       ArrayCopy (a,_a);
   }
};
 
Igor Makanu :

olabilmek

belki hala statik bir dizinin başlatılmasını mı arıyorsunuz?

ilginç seçenek.

"kurucu içeren bir yöntem" çağrısı mı?

 
Pavel Verveyko :

ilginç seçenek.

"kurucu içeren bir yöntem" çağrısı mı?

Numara

statiğin başlatılması budur, bu şekilde yazılır

başlatamazsınız, kod şöyle görünecektir:

 class A
{
public :
   static bool Mass[ 5 ];
               A() { ArrayPrint (Mass); }
};

static bool A::Mass[ 5 ];
//+------------------------------------------------------------------+
void OnStart ()
{
   A a;
}
//+------------------------------------------------------------------+

bu bir yöntem çağrısı değil, tam nitelikli sınıf alan adı A::Mass[5];

ancak satırı silerseniz, bir derleyici hatası olacaktır - statiklerin sınıf örneği oluşturulana kadar bellek ayırması gerekir - sarı çizgi bunu yapar
 
Igor Makanu :

Numara

statiğin başlatılması budur, bu şekilde yazılır

başlatamazsınız, kod şöyle görünecektir:

teşekkürler, bu satırın ( statik bool A::Kütle[ 5 ]; ) yapıcıya devredilmeyecek, nasıl?

 
Pavel Verveyko :

veya statik sadece benzer bir durumda başlatıldı mı?

yukarıya yazı eklendi

evet, statiklerin ayrı ayrı açıklanması gerekiyor, burada @fxsaber bunu çözmeye yardımcı oldu https://www.mql5.com/ru/forum/325418/page4#comment_16116740

MQL'de bunun gibi statik sınıfları da başlatabilirsiniz.


Pavel Verveyko :

teşekkürler, bu satırın ( statik bool A::Kütle[ 5 ]; ) yapıcıya devredilmeyecek, nasıl?

hayır, bu sınıfın bir yığın alanıdır, ancak belleğin, sınıfın bir örneğini oluştururken değil, önceden tahsis edilmesi gerektiğini yazıyorum.

ve gelecekte düzenli bir dizi olarak kullanacaksınız

soru genellikle tek bir strroic şeklinde başlatılıyorsa, aradığınız şey Sergey'in sürümüdür ve sadece statiğe ihtiyacınız yoktur

 
Igor Makanu :

yukarıya yazı eklendi

evet, statiklerin ayrı ayrı açıklanması gerekiyor, burada @fxsaber bunu çözmeye yardımcı oldu https://www.mql5.com/ru/forum/325418/page4#comment_16116740

MQL'de bunun gibi statik sınıfları da başlatabilirsiniz.

teşekkürler, şimdi diziye erişebildiğinizi anlamaya çalıştım.

 int OnInit ()
{
   ArrayPrint (A::Mass);

   return ( INIT_SUCCEEDED );
}

Dürüst olmak gerekirse, OOP'miz var, ancak bunu yardımda görmedim. Yardımın bu tür incelikleri tanımlamaması üzücü.

Cevap veren herkese çok teşekkürler !

Neden: