给OOP专家的一个问题。

 

你如何对对象及其属性进行OOP循环?

例如,我执行一个循环,如下所示

//Цикл по объектам в поиске нужного значения конкретного свойства.

for(int a1 = 0; a1 < obj_total; a1++)
  {
   if(G_CORE[a1][_X_SIZE] == THIS_SIZE)
     {
      G_CORE[a1][_this_state_color] = clrWhite;
      Redraw(a1);
     } 
  }

//Цикл по свойствам в поиске неверного значения

for(int a1 = 0; a1 < prop_total; a1++)
  {
   if(G_CORE[ELEMENT][a1] > Max_value)
     {
      G_CORE[ELEMENT][a1] = Max_value;
      Redraw(ELEMENT);
     } 
  }
 

另一个有趣的事情是如何创建一个对象或组的层次结构。例如,有几个类别,每个类别包含一个有n个对象的组。OOP概念提出了哪些建立层次结构的方法?

层次结构的实现应该在其部分和循环中的层次之间提供方便的过渡。如果你在数组内建立一个层次结构,你将会留下大量的空白空间。如果它是由一个复杂的数组建立的,它将不允许自由地在链接中循环。OOP建议什么?

 
Реter Konow:

你如何对对象及其属性进行OOP循环?

例如,我执行一个循环,如下所示

CObj obj[];
...
for (int i=0;i<ArraySize(obj);obj[i++].CheckSomething(param));
情况是这样的。而在这个类里面,在CheckSomething()方法中,所有的逻辑都被实现了。
 
Vladimir Simakov:
情况是这样的。而在这个类里面,在CheckSomething()方法中,所有的逻辑都被实现了。

谢谢你。首先我们从对象中组合出数组obj[],然后做一个循环?

那么等级制度呢?而我们正在谈论的是静态的层次结构。恒定的、不可改变的。

 
Реter Konow:

谢谢你。首先我们从对象中组合出数组obj[],然后做一个循环?

那么等级制度呢?我们正在谈论的是一个静态的层次结构。恒定的、不可改变的。

class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
 
Vladimir Simakov:
那么,我们创建一个类的层次结构,然后在一个单独的类中收集它们的所有对象,并循环浏览它们?
 
Реter Konow:
那么,我们创建一个类的层次结构,然后在一个单独的类中收集它们的所有对象,并循环浏览它们?

这取决于你需要什么,但原则上是这样的。你同意它比你的数组要优雅得多。鉴于我强烈怀疑他们的多维 数组实际上根本不是数组,因为它们不能被传入dll,函数调用的开销很可能是一样的。

 
Реter Konow:

在OOP中,你如何在对象 及其属性 上进行循环

标签是Konow
并通过它们对所有的链接 做一个循环

使用常见的术语,不仅可以用你的问题误导对方,而且可以确保你的问题得到解答

OOP Wiki- 条款在此。

供你参考,你可以制作对象实例的数组(见上文),或者看看WndContainer.mqh和ArrayObj.mqh来源,它们被用来创建基于CPanelDialog的图形面板(现成的例子在ndicators/Examples/Panels/SimplePanel文件夹中),但它们可以使用指针和列表

 
Vladimir Simakov:

这取决于你所追求的东西,但原则上是这样的。你同意它比你的数组要优雅得多。鉴于我强烈怀疑他们的多维 数组实际上根本不是数组,因为它们不能被传入dll,函数调用的开销很可能是一样的。

好吧,也许更优雅,我不会争论。我非常关注实用性、权宜性、简单性和便利性,我把任何语法都看成是 "人民的敌人",因为它需要注意、解析、产生错误并阻碍感知。这就是为什么我尝试使用尽可能简单甚至原始的代码结构。最主要的是,它们应该易于阅读和有效。

当然,在等级制度上有一个障碍。如果我们真的用数组来做,循环将提供更多的机会来解析链接、组、子组、子子组等等。但内存的使用效率会很低。如果我们使用类,这似乎是一个理想的解决方案。但这是为了一个 "死 "的等级制度。对于一个图像。但是,如果我们需要创建一个与之配合的引擎--我担心在这里所有的地狱将被打破))。

 
Реter Konow:

谢谢你。首先我们从对象中组合出数组obj[],然后做一个循环?

那么等级制度呢?我们正在谈论的是一个静态的层次结构。恒定的、不可改变的。

解释一下你说的"......这是一个静态的层次结构 "是什么意思。恒定不变的"?
 
Igor Makanu:

使用常见的术语,你不仅可能用你的问题迷惑对方,而且你会确信你的问题已经得到了回答。

OOP Wiki- 条款在此。

对于一个给定的主题,你可以制作对象实例的数组(见上面的答案),或者看看WndContainer.mqh和ArrayObj.mqh来源,它们被用来创建基于CPanelDialog的面板(你可以在文件夹ndicators/Examples/Panels/SimplePanel中找到一个现成的例子),但是它们可以与指针和列表一起工作。

在OOP中,"对象 "是指对一个类的引用,其字段(属性)在其中被声明。我所说的 "对象 "是指一组编号的属性,每个属性都是一个数组中的单元。这就是区别。

这些问题与图形界面的主题无关。我早就绕过了图形库,在那里没有什么可找的。但是,现在我对人工智能感兴趣,它提出了新的挑战和问题。

原因: