MQL5中的OOP问题 - 页 19 1...121314151617181920212223242526...96 新评论 Igor Makanu 2019.08.29 10:46 #181 Vladimir Simakov: 我有一个假设,就是不会有很多,比如说0.15。至少我没有听说过这个消息。如果我这样做,我将改变它。 我知道这不太可能,但你总是希望有完美的解决方案 )))) 好吧,这不是最大的问题,但我为自己制造了一个问题......我想要一个完美的OOP,但没有不必要的调用,一切都很理想。 我想有5个类的实例,但我需要对类的字段进行一次初始化--它们包含终端环境,在程序执行期间不会改变。 string Language; 如果我声明静态字符串Language;- 那么将出现一个错误,即未解决的静态变量'A::Language'。 这里有一个例子 //+------------------------------------------------------------------+ class A { public: string Language; A() { Print(__FUNCTION__); Language = TerminalInfoString(TERMINAL_LANGUAGE); } }; //+------------------------------------------------------------------+ class B:public A { public: B() {Print(__FUNCTION__,Language); } }; //+------------------------------------------------------------------+ B *arrB[5]; //+------------------------------------------------------------------+ int OnInit() { for(int i=0; i<5; i++) arrB[i] = new B; return(INIT_SUCCEEDED); } 我将在这个表单中初始化字符串Language 5次--这是不对的,它不会用静态修改器 编译。 而且,不需要有5份语言变量的副本!- 试着在B类中声明一个类的实例--同样的事情 5个语言变量有 2019.08.29 12:44:58.384 tst__ EURUSD,M15: 已初始化 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3 Questions on OOP in Weekly performance Weekly Winners Andrey Barinov 2019.08.29 10:51 #182 Igor Makanu: 我知道这不太可能,但你总是希望有完美的解决方案 )))) 好吧,这不是最大的问题,但我为自己制造了一个问题......我想要一个完美的OOP,但没有不必要的调用,一切都很理想。 我想有5个类的实例,但我需要对类的字段进行一次初始化--它们包含终端环境,在程序执行期间不会改变。 如果我声明静态字符串Language;- 那么将出现一个错误,即未解决的静态变量'A::Language'。 这里有一个例子 我将在这个表格中初始化字符串Language 5次--这是不对的,而且它不能用静态修改器 编译 2019.08.29 12:44:58.384 tst__ EURUSD,M15: 已初始化 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3 class Test { private: static const string Language; public: Test(void){} ~Test(void){} }; static const string Test::Language=::TerminalInfoString(TERMINAL_LANGUAGE); Igor Makanu 2019.08.29 10:54 #183 Andrey Barinov: 好吧,这是个选项 但我想把它全部包在一个类中--在我的例子中,我有一个类B,我想要5个B的实例,但我不想初始化5次Language,因此我不想在每个实例中都有一个Language变量。 我怎样才能摆脱多余的语言? Andrey Barinov 2019.08.29 10:57 #184 Igor Makanu: 好吧,这是个选项 但我想把它全部包在一个类中--在我的例子中,我有一个类B,我想要5个B的实例,但我不想初始化5次 Language,因此我不想在每个实例中都 有一个Language 变量。 我怎样才能摆脱多余的语言? 继承。这样,它就只被初始化一次。 Vladimir Simakov 2019.08.29 11:22 #185 Igor Makanu: 我知道这不太可能,但你总是希望有完美的解决方案 )))) 好吧,这不是最大的问题,但我为自己制造了一个问题......我想要一个完美的OOP,但没有不必要的调用,一切都很理想。 我想有5个类的实例,但我需要对类的字段进行一次初始化--它们包含终端环境,在程序执行期间不会改变。 如果我声明静态字符串Language;- 那么将出现一个错误,即未解决的静态变量'A::Language'。 这里有一个例子 我将在这个表单中初始化字符串Language 5次--这是不对的,它不会用静态修改器 编译。 而且,不需要有5份语言变量的副本!- 试着在B类中声明一个类的实例--同样的事情 5个语言变量有 2019.08.29 12:44:58.384 tst__ EURUSD,M15: 已初始化 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3 我现在正在用我的手机。今晚提醒我,我将告诉你如何解决这个问题。 Igor Makanu 2019.08.29 11:27 #186 Andrey Barinov: 继承。在这种形式下,它将只被初始化一次。 对我有用 //+------------------------------------------------------------------+ string MyTerminalInfoString() { Print(__FUNCTION__); return("ru"); } //+------------------------------------------------------------------+ class CLang { protected: static const string Language; public: CLang(void) {Print(__FUNCTION__);} ~CLang(void) {} }; //+------------------------------------------------------------------+ static const string CLang::Language=MyTerminalInfoString(); //+------------------------------------------------------------------+ class B:public CLang { public: B() {Print(__FUNCTION__,Language); } }; //+------------------------------------------------------------------+ B *arrB[5]; //+------------------------------------------------------------------+ int OnInit() { for(int i=0; i<5; i++) arrB[i] = new B; return(INIT_SUCCEEDED); } 2019.08.29 13:24:19.690 tst__ EURUSD,M15: 已初始化 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: MyTerminalInfoString 至少调用一次myTerminalInfoString()。 因此,我有点像一个单身汉了 谢谢你! Igor Makanu 2019.08.29 11:28 #187 Vladimir Simakov: 我现在正在用我的手机。晚上提醒我,我会告诉你如何解决这个问题。 好的,如果不是太麻烦的话。 对我来说,Singleton主题是相当新的,有创意的空间--例子是 Vladimir Simakov 2019.08.29 12:13 #188 Igor Makanu: 好的,如果不是太麻烦的话。 对我来说,Singleton主题是相当新的,有创意的空间--例子是 那么,你是想要一个单子,还是一个对象的一般字段? Igor Makanu 2019.08.29 12:27 #189 Vladimir Simakov: 那么,你需要一个对象的共同字段吗? 很难说我想要什么 )))) 让我试着把它变成文字。 - 我想要一个由构造函数初始化的类,这个类将没有任何方法;该类的目的是打开一个订单,然后根据脚本关闭和/或重新打开几个订单;脚本类型是一个枚举。 - 我将使用一个类的实例数组--至少5个 - 我不想每次打开订单都不调用终端环境。 因此,我想用SYMBOL_VOLUME_MAX、Symbol、SYMBOL_VOLUME_MIN和SYMBOL_VOLUME_STEP中的数字作为类中的常量值 - 我想优化变量的使用,也就是说,我不想重复上一段中的常数。 这大概就是我所看到的一切,但总的来说,现在的问题减少到了类本身的正确结构上,因为原来已经要继承了,所以SYMBOL_VOLUME_MAX , Symbol,SYMBOL_VOLUME_MIN ...以有一份,我想我还是会绊住错误输出,我将使用我的PrintLastError.mqhhttps://www.mql5.com/ru/code/24829#,像这样的东西。 Koldun Zloy 2019.08.29 12:56 #190 一个静态变量,即使没有继承,也会对所有实例都是一样的。 1...121314151617181920212223242526...96 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我有一个假设,就是不会有很多,比如说0.15。至少我没有听说过这个消息。如果我这样做,我将改变它。
我知道这不太可能,但你总是希望有完美的解决方案 ))))
好吧,这不是最大的问题,但我为自己制造了一个问题......我想要一个完美的OOP,但没有不必要的调用,一切都很理想。
我想有5个类的实例,但我需要对类的字段进行一次初始化--它们包含终端环境,在程序执行期间不会改变。
string Language;
如果我声明静态字符串Language;- 那么将出现一个错误,即未解决的静态变量'A::Language'。
这里有一个例子
我将在这个表单中初始化字符串Language 5次--这是不对的,它不会用静态修改器 编译。
而且,不需要有5份语言变量的副本!- 试着在B类中声明一个类的实例--同样的事情 5个语言变量有
2019.08.29 12:44:58.384 tst__ EURUSD,M15: 已初始化
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
我知道这不太可能,但你总是希望有完美的解决方案 ))))
好吧,这不是最大的问题,但我为自己制造了一个问题......我想要一个完美的OOP,但没有不必要的调用,一切都很理想。
我想有5个类的实例,但我需要对类的字段进行一次初始化--它们包含终端环境,在程序执行期间不会改变。
如果我声明静态字符串Language;- 那么将出现一个错误,即未解决的静态变量'A::Language'。
这里有一个例子
我将在这个表格中初始化字符串Language 5次--这是不对的,而且它不能用静态修改器 编译
2019.08.29 12:44:58.384 tst__ EURUSD,M15: 已初始化
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
好吧,这是个选项
但我想把它全部包在一个类中--在我的例子中,我有一个类B,我想要5个B的实例,但我不想初始化5次Language,因此我不想在每个实例中都有一个Language变量。
我怎样才能摆脱多余的语言?
好吧,这是个选项
但我想把它全部包在一个类中--在我的例子中,我有一个类B,我想要5个B的实例,但我不想初始化5次 Language,因此我不想在每个实例中都 有一个Language 变量。
我怎样才能摆脱多余的语言?
继承。这样,它就只被初始化一次。
我知道这不太可能,但你总是希望有完美的解决方案 ))))
好吧,这不是最大的问题,但我为自己制造了一个问题......我想要一个完美的OOP,但没有不必要的调用,一切都很理想。
我想有5个类的实例,但我需要对类的字段进行一次初始化--它们包含终端环境,在程序执行期间不会改变。
如果我声明静态字符串Language;- 那么将出现一个错误,即未解决的静态变量'A::Language'。
这里有一个例子
我将在这个表单中初始化字符串Language 5次--这是不对的,它不会用静态修改器 编译。
而且,不需要有5份语言变量的副本!- 试着在B类中声明一个类的实例--同样的事情 5个语言变量有
2019.08.29 12:44:58.384 tst__ EURUSD,M15: 已初始化
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
继承。在这种形式下,它将只被初始化一次。
对我有用
2019.08.29 13:24:19.690 tst__ EURUSD,M15: 已初始化
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: MyTerminalInfoString
至少调用一次myTerminalInfoString()。
因此,我有点像一个单身汉了
谢谢你!
我现在正在用我的手机。晚上提醒我,我会告诉你如何解决这个问题。
好的,如果不是太麻烦的话。
对我来说,Singleton主题是相当新的,有创意的空间--例子是
好的,如果不是太麻烦的话。
对我来说,Singleton主题是相当新的,有创意的空间--例子是
那么,你需要一个对象的共同字段吗?
很难说我想要什么 ))))
让我试着把它变成文字。
- 我想要一个由构造函数初始化的类,这个类将没有任何方法;该类的目的是打开一个订单,然后根据脚本关闭和/或重新打开几个订单;脚本类型是一个枚举。
- 我将使用一个类的实例数组--至少5个
- 我不想每次打开订单都不调用终端环境。 因此,我想用SYMBOL_VOLUME_MAX、Symbol、SYMBOL_VOLUME_MIN和SYMBOL_VOLUME_STEP中的数字作为类中的常量值
- 我想优化变量的使用,也就是说,我不想重复上一段中的常数。
这大概就是我所看到的一切,但总的来说,现在的问题减少到了类本身的正确结构上,因为原来已经要继承了,所以SYMBOL_VOLUME_MAX , Symbol,SYMBOL_VOLUME_MIN ...以有一份,我想我还是会绊住错误输出,我将使用我的PrintLastError.mqhhttps://www.mql5.com/ru/code/24829#,像这样的东西。