MQL5中的OOP问题 - 页 36 1...293031323334353637383940414243...96 新评论 fxsaber 2019.09.12 09:35 #351 Igor Makanu: 嗯,是的,这是一个更好的解决方案!这样就少了一个方法 在OnStart中应该只有一个新的。 Igor Makanu 2019.09.13 10:10 #352 Koldun Zloy: 1.调用这个函数两次并没有什么问题。 2.你不介意那些反对使用静态函数的人没有给出丝毫的论据吗? 你最好不要随便看别人的视频,而是看书。 我希望 视频的作者https://youtu.be/lfdAwl3-X_c,https://youtu.be/zME4SOCHT0I,很多好的东西.....,敲了整整一个星期,我坐下来做的每一件事都开始思考,而不是像以前那样做....。你不能使用静态的,这不是OOP! 我想完成这个代码,我有一个问题。 - 我想保存对象的字段,好在,字段被立即放在结构中,你可以通过FileWriteStruct()一键保存它们。 - 一个类有N个对象,都是从一个基类继承而来。 - 因为我看了视频,我希望有些方法可以帮助我不去询问每个对象是否需要保存文件....。在一般情况下,惨败,我们决定不做傻事,创建一个方法,将静态地分配一个标志写到文件中去 class CStrategy: public IStrategy { protected: static bool f_save_required; void SetSaveRequired() { CStrategy::f_save_required = true; } public: bool GetSaveRequired() { return(CStrategy::f_save_required); } 它按计划运作 而问题本身,如果你这样写,会发生什么。 class CStrategy: public IStrategy { private: static bool f_save_required; protected: void SetSaveRequired() { CStrategy::f_save_required = true; } public: bool GetSaveRequired() { return(CStrategy::f_save_required); } 如果你这样写,会发生什么。 class CStrategy: public IStrategy { private: static bool f_save_required; protected: void SetSaveRequired() { f_save_required = true; } public: bool GetSaveRequired() { return(f_save_required); } Igor Makanu 2019.09.13 10:14 #353 试着用不同的方法来修改测试脚本,我看不出有什么不同,给我看看上面的帖子的正确修改方法:(protected / private )和调用M::x或只是x。 //+------------------------------------------------------------------+ interface I { bool main(); }; //+------------------------------------------------------------------+ class M:public I { protected: static int x; bool main() { x++; Print(__FUNCTION__," = ",x); return(x>0); } public: M() { Print(__FUNCTION__);} ~M() { Print(__FUNCTION__);} }; //+------------------------------------------------------------------+ static int M::x=0; //+------------------------------------------------------------------+ class A:public M { public: A() { Print(__FUNCTION__);} ~A() { Print(__FUNCTION__);} }; //+------------------------------------------------------------------+ class B:public M { public: B() { Print(__FUNCTION__);} ~B() { Print(__FUNCTION__);} }; //+------------------------------------------------------------------+ class C:public M { public: C() { Print(__FUNCTION__);} ~C() { Print(__FUNCTION__);} }; //+------------------------------------------------------------------+ void OnStart() { I *a = new A; I *b = new B; I *c = new C; I *m = new M; a.main(); b.main(); c.main(); m.main(); delete a; delete b; delete c; delete m; } //+------------------------------------------------------------------+ Vladimir Simakov 2019.09.13 10:28 #354 Igor Makanu:试着用不同的方法来修改测试脚本,我看不出有什么不同,给我看看上面的帖子的正确修改方法:(protected / private )和调用M::x或只是x。 如果是受保护的,那么只有在定义了字段的类 的方法中才可以引用,这里的逻辑是通用的。 Vladimir Simakov 2019.09.13 10:39 #355 顺便说一句,节日快乐。另一个字节已经发生。 Igor Makanu 2019.09.13 10:41 #356 Vladimir Simakov: 在类的方法 中你调用x,在所有其他地方M::x,如果是保护的,那么只有在定义了该字段的类的方法中才能访问,这里的逻辑是共同的。 对!我在睡觉时做了一个错误的例子,所以我得到了'M::main' - 不能访问私有成员函数。 class M { private: static int x; bool main() { x++; Print(__FUNCTION__," = ",x); return(x>0); } public: M() { Print(__FUNCTION__);} ~M() { Print(__FUNCTION__);} }; //+------------------------------------------------------------------+ static int M::x=0; //+------------------------------------------------------------------+ class A:public M { public: A() { Print(__FUNCTION__);} ~A() { Print(__FUNCTION__);} void inc() {main();} }; //+------------------------------------------------------------------+ class B:public M { public: B() { Print(__FUNCTION__);} ~B() { Print(__FUNCTION__);} void inc() {main();} }; //+------------------------------------------------------------------+ class C:public M { public: C() { Print(__FUNCTION__);} ~C() { Print(__FUNCTION__);} void inc() {main();} }; //+------------------------------------------------------------------+ void OnStart() { A *a = new A; B *b = new B; C *c = new C; M *m = new M; a.inc(); delete a; delete b; delete c; delete m; } //+------------------------------------------------------------------+ got 'M::main' - cannot access private member function tst.mq5 25 32 如果我把它写下来 protected: bool main() { x++; Print(__FUNCTION__," = ",x); return(x>0); } 一切按计划进行! Igor Makanu 2019.09.13 10:42 #357 Vladimir Simakov: 顺便说一句,节日快乐。 另一个字节发生了。 谢谢你,已经整理好了! 节日快乐! Koldun Zloy 2019.09.13 13:53 #358 Igor Makanu: 我希望 视频的作者https://youtu.be/lfdAwl3-X_c,https://youtu.be/zME4SOCHT0I,很多好东西.....,敲了一星期,我坐下来做的每件事都开始思考,而不是像以前那样做....。你不能使用静态的,这不是OOP! 我想完成这个代码,我有一个问题。 - 我想保存对象的字段,好在,字段被立即放在结构中,你可以通过FileWriteStruct()一键保存它们。 - 一个类有N个对象,都是从一个基类继承而来。 - 因为我看了视频,我希望有些方法可以帮助我不去询问每个对象是否需要保存文件....。在一般情况下,惨败,我们决定不做傻事,创建一个方法,将静态地分配一个标志写到文件中去 它按计划运作 而问题本身,如果你这样写,会发生什么。 如果你这样写会发生什么。 一个对象是否需要被保存到文件中,取决于什么? 这个标志对所有对象都是通用的吗? Igor Makanu 2019.09.13 14:10 #359 Koldun Zloy: 它依靠什么来把对象保存到文件中? 这是所有对象的共同特征吗? 那么这个问题是辩证的,当然,在这里 - 最好是有10个策略,写10个文件,改变TC的状态(1个TC=1个结构)。 - 或者更合理的做法是,从类中传出一个句柄,每个tick都有一个策略的调用(搜索),所以它们都写到一个文件中。 我认为第二种说法更符合逻辑 事实证明,在所有TC开始之后,你需要写一次10个结构--状态已经改变了。 然后以随机的顺序在需要时写入(触发SL或TP)--在这里,打开文件 并一次性写入10个结构也是比较快的,策略不是点状的,不是每秒钟,每个TS从一分钟到一个小时都有。 到目前为止,我已经实现了对静态变量的描述,并通过get-set、set protected、get public对其进行访问,在调用后还将静态变量重置为false。 Koldun Zloy 2019.09.13 14:18 #360 Igor Makanu: 嗯,这个问题是辩证的,当然,在这里 - 你有10个策略,写10个文件,改变TC的状态(1个TC=1个结构)。 - 或者更合理的做法是,从类中传出一个句柄,在一个tick上有一个策略的调用(搜索),所以它们都写到一个文件中。 我认为第二种说法更符合逻辑 事实证明,在所有TC开始之后,你需要写一次10个结构--状态已经改变了。 然后以随机的顺序在需要时写入(触发SL或TP)--在这里,打开文件 并一次性写入10个结构也是比较快的,策略不是点状的,不是每秒钟,每个TS从一分钟到一个小时都有。 目前,我通过描述一个静态变量,通过Get、Set保护、Get公开来实现--它也在调用后将静态变量重置为false。 这一切都很清楚。不清楚为什么SetSaveRequired()和GetSaveRequired()是非静态的,但却写到静态变量。 1...293031323334353637383940414243...96 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
嗯,是的,这是一个更好的解决方案!这样就少了一个方法
1.调用这个函数两次并没有什么问题。
2.你不介意那些反对使用静态函数的人没有给出丝毫的论据吗?
你最好不要随便看别人的视频,而是看书。
我希望 视频的作者https://youtu.be/lfdAwl3-X_c,https://youtu.be/zME4SOCHT0I,很多好的东西.....,敲了整整一个星期,我坐下来做的每一件事都开始思考,而不是像以前那样做....。你不能使用静态的,这不是OOP!
我想完成这个代码,我有一个问题。
- 我想保存对象的字段,好在,字段被立即放在结构中,你可以通过FileWriteStruct()一键保存它们。
- 一个类有N个对象,都是从一个基类继承而来。
- 因为我看了视频,我希望有些方法可以帮助我不去询问每个对象是否需要保存文件....。在一般情况下,惨败,我们决定不做傻事,创建一个方法,将静态地分配一个标志写到文件中去
它按计划运作
而问题本身,如果你这样写,会发生什么。
如果你这样写,会发生什么。
试着用不同的方法来修改测试脚本,我看不出有什么不同,给我看看上面的帖子的正确修改方法:(protected / private )和调用M::x或只是x。
试着用不同的方法来修改测试脚本,我看不出有什么不同,给我看看上面的帖子的正确修改方法:(protected / private )和调用M::x或只是x。
在类的方法 中你调用x,在所有其他地方M::x,如果是保护的,那么只有在定义了该字段的类的方法中才能访问,这里的逻辑是共同的。
对!我在睡觉时做了一个错误的例子,所以我得到了'M::main' - 不能访问私有成员函数。
got 'M::main' - cannot access private member function tst.mq5 25 32
如果我把它写下来
一切按计划进行!
顺便说一句,节日快乐。 另一个字节发生了。
谢谢你,已经整理好了!
节日快乐!
我希望 视频的作者https://youtu.be/lfdAwl3-X_c,https://youtu.be/zME4SOCHT0I,很多好东西.....,敲了一星期,我坐下来做的每件事都开始思考,而不是像以前那样做....。你不能使用静态的,这不是OOP!
我想完成这个代码,我有一个问题。
- 我想保存对象的字段,好在,字段被立即放在结构中,你可以通过FileWriteStruct()一键保存它们。
- 一个类有N个对象,都是从一个基类继承而来。
- 因为我看了视频,我希望有些方法可以帮助我不去询问每个对象是否需要保存文件....。在一般情况下,惨败,我们决定不做傻事,创建一个方法,将静态地分配一个标志写到文件中去
它按计划运作
而问题本身,如果你这样写,会发生什么。
如果你这样写会发生什么。
一个对象是否需要被保存到文件中,取决于什么?
这个标志对所有对象都是通用的吗?
它依靠什么来把对象保存到文件中?
这是所有对象的共同特征吗?
那么这个问题是辩证的,当然,在这里
- 最好是有10个策略,写10个文件,改变TC的状态(1个TC=1个结构)。
- 或者更合理的做法是,从类中传出一个句柄,每个tick都有一个策略的调用(搜索),所以它们都写到一个文件中。
我认为第二种说法更符合逻辑
事实证明,在所有TC开始之后,你需要写一次10个结构--状态已经改变了。
然后以随机的顺序在需要时写入(触发SL或TP)--在这里,打开文件 并一次性写入10个结构也是比较快的,策略不是点状的,不是每秒钟,每个TS从一分钟到一个小时都有。
到目前为止,我已经实现了对静态变量的描述,并通过get-set、set protected、get public对其进行访问,在调用后还将静态变量重置为false。
嗯,这个问题是辩证的,当然,在这里
- 你有10个策略,写10个文件,改变TC的状态(1个TC=1个结构)。
- 或者更合理的做法是,从类中传出一个句柄,在一个tick上有一个策略的调用(搜索),所以它们都写到一个文件中。
我认为第二种说法更符合逻辑
事实证明,在所有TC开始之后,你需要写一次10个结构--状态已经改变了。
然后以随机的顺序在需要时写入(触发SL或TP)--在这里,打开文件 并一次性写入10个结构也是比较快的,策略不是点状的,不是每秒钟,每个TS从一分钟到一个小时都有。
目前,我通过描述一个静态变量,通过Get、Set保护、Get公开来实现--它也在调用后将静态变量重置为false。
这一切都很清楚。不清楚为什么SetSaveRequired()和GetSaveRequired()是非静态的,但却写到静态变量。