MQL5中的OOP问题 - 页 68 1...616263646566676869707172737475...96 新评论 Roman 2020.05.29 05:41 #671 Dmitry Fedoseev: 为什么?另一种模式。除了模式的信徒不承认它,显然不是正统的,不是典范的。 为什么不是递归?同样是递归,只是不是沿着,而是跨越。 伊戈尔只是抱怨说,他有两个周期,不能把奇迹塞进一个周期。 所以,我想起了这个网站上的一个例子,也许我完全可以不用循环。奇迹可能会发生 )) 所以我建议采用这种方式,只是为了思考 )) 也许不用循环就能成功。 而事实上,有人什么不根据宗教,这是一个问题,每个人。 Igor Makanu 2020.05.29 06:19 #672 Roman: 伊戈尔只是抱怨他得到了两个循环,不能把奇迹塞进一个循环。 我不是在抱怨,我是想学习程序员的秘密 :) 我可以做到,我可以用递归来包裹(替换)一个循环--这样做才有意义 :) 罗马 人。 不属于宗教的东西是大家的事。 这与宗教信仰无关,而是理解有成熟的编程实践,如果大多数人使用这些实践,就意味着它们是有效的--在速度方面有效,在代码可读性 方面有效,在进一步维护方面有效,在重用方面有效...... 我认为,在编程方面的知识通常是关于不拥有材料(或信息),然后将这些 "耙子 "作为你自己的创新来传播。 Roman 2020.05.29 06:41 #673 Igor Makanu: 我不是在抱怨,我是想了解程序员的秘密 :) 我可以做到,我也可以使用递归,如果这有帮助的话:) 这不是关于宗教,而是关于有成熟的编程实践的想法,如果大多数人使用它们,就意味着它们是高效的--在速度方面是高效的,在代码可读性 方面是高效的,在进一步维护方面是高效的,在重复使用方面是高效的...... 而宗教呢?我认为,在编程中的诀窍通常是不拥有材料(或信息),然后将这些 "耙子 "作为自己的创新来传播。 有一个例子提到,这个例子使用了元编程模式。 使用模板,可以编写在编译时进行计算的程序,只要它适合任务。 这样的程序被称为模板元程序。 该终端被称为MetaTrader是有原因的。;)) Aleksey Mavrin 2020.05.29 07:51 #674 Igor Makanu: 我不是在抱怨,我是想了解程序员的秘密 :) 我可以做到,我也可以使用递归,如果这有帮助的话:) 这不是关于宗教,而是关于有成熟的编程实践的想法,如果大多数人使用它们,就意味着它们是高效的--在速度方面是高效的,在代码可读性 方面是高效的,在进一步维护方面是高效的,在重复使用方面是高效的...... 和宗教?我认为,在编程中的诀窍,通常不是拥有材料(或信息),然后把这些 "耙子 "作为自己的创新来传播。 伊戈尔,今天早上我忍不住了,在膝盖上画了一个没有循环的任何方法的调用。以防万一,它可能真的会派上用场。*小心翼翼地,使用了SB :)) #include <Arrays\List.mqh> //+------------------------------------------------------------------+ class base : public CObject { public: virtual void HighPriorityTask() {} virtual void Task() {} }; //+------------------------------------------------------------------+ class A: public base { private: static A*lastnode; static A*rootnode; static int ID_counter; public: int ID; A() { Prev((CObject*)lastnode); A*self = GetPointer(this); if(lastnode) lastnode.Next(self); lastnode=self; if(rootnode==NULL) rootnode=self; ID=ID_counter++; } static A* GetRoot() {return rootnode;} virtual void HighPriorityTask() { Print(__FUNCSIG__," ID=",ID); A* next=(A*)Next(); if(next!=NULL) next.HighPriorityTask(); } }; A* A::rootnode=NULL; A* A::lastnode=NULL; int A::ID_counter=0; //+------------------------------------------------------------------+ class B: public base { public: virtual void Task() { Print(__FUNCSIG__); } }; //+------------------------------------------------------------------+ void OnStart() { base *obj[4];; obj[0] = new A; obj[1] = new A; obj[2] = new B; obj[3] = new B; A* arr[5]; for(int i=0; i<5; i++) { arr[i]= new A(); } if(A::GetRoot()!=NULL) A::GetRoot().HighPriorityTask(); for(int i=ArraySize(obj)-1; i>=0; i--) { //obj[i].HighPriorityTask(); obj[i].Task(); } for(int i=ArraySize(obj)-1; i>=0; i--) delete obj[i]; for(int i=0; i<5; i++) { delete arr[i]; } } //+------------------------------------------------------------------+ Maxim Kuznetsov 2020.05.29 09:52 #675 Dmitry Fedoseev: 为什么?另一种模式。除了模式的信徒不承认它,显然不是正统的,不是典范的。 为什么不是递归?这也是递归,只是不是纵向的,而是横向的。 这被称为 "循环解卷",是由编译器完成的,不需要任何OO和模板(至少应该如此)。 如果你看一下中间代码(汇编程序),只是有N个连续的操作,而不是一个循环。 fxsaber 2020.05.30 10:04 #676 得到了一个意外的结果。#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh // Простая структура. struct STRUCT1 { int i; double j[2]; }; // Сложная структура. struct STRUCT2 { int i; string Str; STRUCT2() : Str("1234567 1234567") { } }; template <typename T> int Func( T &Array[] ) { // Write for (int i = ArraySize(Array) - 1; i >= 0; i--) Array[i].i = i; int Sum = 0; // Read for (int i = ArraySize(Array) - 1; i >= 0; i--) Sum += Array[i].i; return(Sum + ArraySize(Array)); } void OnStart() { STRUCT1 Array1[]; // Простая структура. STRUCT2 Array2[]; // Сложная структура. const int Amount = 5 e7; Print(_B(ArrayResize(Array1, Amount), 1)); Print(_B(ArrayResize(Array2, Amount), 1)); Print(_B(Func(Array1), 1)); // Чтение и запись простой структуры происходит в разы дольше, Print(_B(Func(Array2), 1)); // чем сложной. } 50000000 Alert: Time[Test6.mq5 280: ArrayResize(Array2,Amount)] = 640 ms. 50000000 Alert: Time[Test6.mq5 282: Func(Array1)] = 440 ms. 1333106752 Alert: Time[Test6.mq5 283: Func(Array2)] = 156 ms. 1333106752 Vladimir Simakov 2020.05.30 10:38 #677 fxsaber: 得到了一个意外的结果。 通过sizeof,结构的尺寸 是多少,因为我不在电脑前? fxsaber 2020.05.30 10:58 #678 Vladimir Simakov: 通过sizeof,结构的大小 是多少,因为我不在电脑前? : sizeof(STRUCT1) = 20 : sizeof(STRUCT2) = 16 简单结构的尺寸越大,处理的速度就越慢。 Vladimir Simakov 2020.05.30 11:23 #679 fxsaber: 简单结构的尺寸越大,处理的速度就越慢。 制作第一个结构{int;int;double[2]}。 fxsaber 2020.05.30 11:26 #680 Vladimir Simakov: 制作第一个结构{int;int;double[2]}。 Alert: Time[Test6.mq5 285: Func(Array1)] = 378 ms. Alert: Time[Test6.mq5 286: Func(Array2)] = 156 ms. 结盟与此毫无关系。我马上检查了这一点。 1...616263646566676869707172737475...96 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
为什么?另一种模式。除了模式的信徒不承认它,显然不是正统的,不是典范的。 为什么不是递归?同样是递归,只是不是沿着,而是跨越。
伊戈尔只是抱怨说,他有两个周期,不能把奇迹塞进一个周期。
所以,我想起了这个网站上的一个例子,也许我完全可以不用循环。奇迹可能会发生 ))
所以我建议采用这种方式,只是为了思考 )) 也许不用循环就能成功。
而事实上,有人什么不根据宗教,这是一个问题,每个人。
伊戈尔只是抱怨他得到了两个循环,不能把奇迹塞进一个循环。
我不是在抱怨,我是想学习程序员的秘密 :)
我可以做到,我可以用递归来包裹(替换)一个循环--这样做才有意义 :)
不属于宗教的东西是大家的事。
这与宗教信仰无关,而是理解有成熟的编程实践,如果大多数人使用这些实践,就意味着它们是有效的--在速度方面有效,在代码可读性 方面有效,在进一步维护方面有效,在重用方面有效......
我认为,在编程方面的知识通常是关于不拥有材料(或信息),然后将这些 "耙子 "作为你自己的创新来传播。
我不是在抱怨,我是想了解程序员的秘密 :)
我可以做到,我也可以使用递归,如果这有帮助的话:)
这不是关于宗教,而是关于有成熟的编程实践的想法,如果大多数人使用它们,就意味着它们是高效的--在速度方面是高效的,在代码可读性 方面是高效的,在进一步维护方面是高效的,在重复使用方面是高效的......
而宗教呢?我认为,在编程中的诀窍通常是不拥有材料(或信息),然后将这些 "耙子 "作为自己的创新来传播。
有一个例子提到,这个例子使用了元编程模式。
使用模板,可以编写在编译时进行计算的程序,只要它适合任务。
这样的程序被称为模板元程序。
该终端被称为MetaTrader是有原因的。
;))
我不是在抱怨,我是想了解程序员的秘密 :)
我可以做到,我也可以使用递归,如果这有帮助的话:)
这不是关于宗教,而是关于有成熟的编程实践的想法,如果大多数人使用它们,就意味着它们是高效的--在速度方面是高效的,在代码可读性 方面是高效的,在进一步维护方面是高效的,在重复使用方面是高效的......
和宗教?我认为,在编程中的诀窍,通常不是拥有材料(或信息),然后把这些 "耙子 "作为自己的创新来传播。
伊戈尔,今天早上我忍不住了,在膝盖上画了一个没有循环的任何方法的调用。以防万一,它可能真的会派上用场。*小心翼翼地,使用了SB :))
为什么?另一种模式。除了模式的信徒不承认它,显然不是正统的,不是典范的。 为什么不是递归?这也是递归,只是不是纵向的,而是横向的。
这被称为 "循环解卷",是由编译器完成的,不需要任何OO和模板(至少应该如此)。
如果你看一下中间代码(汇编程序),只是有N个连续的操作,而不是一个循环。
得到了一个意外的结果。
通过sizeof,结构的大小 是多少,因为我不在电脑前?
简单结构的尺寸越大,处理的速度就越慢。
简单结构的尺寸越大,处理的速度就越慢。
制作第一个结构{int;int;double[2]}。