MQL5中的OOP问题 - 页 84

 
Pavel Verveyko:
是否可以在公共类部分声明一个静态数组,并在构造函数中初始化它?(如下图)(或只按元素计算?)

你可以

或者你毕竟是在寻找一个静态数组的初始化

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:
静态数组 是否可以在公有类部分声明并在构造函数中初始化?(如下图)(或只按元素计算?)

情况是这样的。

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

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

A a;
总的来说,OOP的这种贫困在其辉煌的背景下是引人注目的。为什么我们在声明变量和数组时不能像往常一样初始化它们?我不怀疑,理论家们现在会搬出很多理论来证明我是个白痴,但还是......。
 
Sergey Dzyublik:

你可以初始化一个本地数组并执行ArrayCopy到相应的数组字段。

这也是一个想法,它也可以放在任何类之外的全局范围内。
这更简单,但我希望它是OOP))

 
Dmitry Fedoseev:

情况是这样的。

总的来说,OOP的这种贫困在其辉煌的背景下是引人注目的。为什么我们在声明变量和数组时不能像往常一样初始化它们?我不怀疑,理论家们会想出很多理论来证明我是个白痴,但还是......。

我每次用OOP 写作时都有完全相同的想法))。

 
Pavel Verveyko:

这也是一个想法,它可以放在任何类之外的全局范围内。
这更简单,但我希望它是OOP))

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

你可以

或者你毕竟是在寻找静态数组的初始化

有趣的选择。

是调用一个 "带有构造函数的方法"?

 
Pavel Verveyko:

有趣的选择。

,这是一个 "带有构造函数的方法 "调用吗?

这就是你初始化静态的方式。

你不需要初始化它,代码会是这样的。

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

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

这不是一个方法调用,而是A::Mass[5]类字段的全名。

但如果你删除了这一行,就会出现编译器错误--static需要在创建类实例之前分配内存--这就是黄线的作用。
 
Igor Makanu:

静态学的初始化是这样写的

你不必初始化它,这就是代码的样子。

谢谢你,原来这一行(静态 bool A::Mass[5];)无论如何也不能转到构造函数中去?

 
Pavel Verveyko:

还是说这是在这种情况下初始化静力学的唯一方法?

上述帖子的补充

是的,静力学应该单独描述,@fxsaber 帮助我理解了它https://www.mql5.com/ru/forum/325418/page4#comment_16116740

你也可以在MQL5中初始化静态类。


Pavel Verveyko:

即这一行(静态 bool A::Mass[5]; )不能转移到构造函数?

不,这是一个静态的类字段。 你需要提前分配内存,而不是在创建类实例的时候。

而你将把它作为一个普通的数组进一步使用

如果问题是关于单个字符串形式的初始化,那么Sergei的版本就是你要找的,只是你不需要静态的。

 
Igor Makanu:

上述帖子的补充

是的,静力学应该单独描述,@fxsaber 帮助我理解了它https://www.mql5.com/ru/forum/325418/page4#comment_16116740

你也可以在MQL中初始化静态类。

谢谢,现在我试了一下,发现用这种方式访问数组是可行的。

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

   return(INIT_SUCCEEDED);
}

说实话,我们有OOP,但我没有在《帮助》中看到它。很遗憾,它没有描述这样的细微差别。

,非常感谢每个人的回复!