mql5中的OOP、模板和宏,细微之处和用途 - 页 8 123456789101112131415...28 新评论 Vasiliy Sokolov 2019.01.25 14:31 #71 Alexey Navoykov: 你指的是他们的标准库 吗?)不,我的意思是,在MQL中,你不能声明一个没有实现的抽象虚拟方法。在MQL中,基类的虚拟方法必须始终有一个实现,这就充满了你提到的问题。 Vasiliy Sokolov 2019.01.25 14:34 #72 Ilya Malev:在C#中没有很多基本的基础接口事实上,有很多。 Ilya Malev:在我看来,这并不全是坏事。在我看来,C#中没有那么多基本的主接口(我不是C#专家),你不能把它们的方法减少到一个基本的超类,然后继承你需要的东西。 P.S. 要想通过<<<<>>>> 这样的结构来实现一些多重的东西,是有点麻烦的。最好通过运算符来做函数,例如a==b调用a.compareto( b ),a[compareer]==b调用compareer.compare(a,b)等。 我认为,这将是一个可怕的混杂物。+ 调用虚拟方法是不自由的。 Alexey Navoykov 2019.01.25 14:45 #73 Vasiliy Sokolov:不,我的意思是,在MQL中,你不能声明一个没有实现的抽象虚拟方法。在MQL中,基类的虚拟方法必须始终有一个实现,这就充满了你提到的问题。我不知道为什么你不能在没有实施的情况下声明它?多年来,MQL一直支持抽象类方法。 Ilya Malev 2019.01.25 14:47 #74 Vasiliy Sokolov:1.事实上,有很多这样的人。 2.我认为,这将是一个可怕的混杂物。+ 对虚拟方法的调用是不自由的。1.我就知道。 2.让我们看看会发生什么,如果我设法把我现在做的事情做好,我会在论坛上发表)。 不是免费的,是的。任何通用的OOP解决方案都是昂贵的,但如果你的目的是轻松和漂亮地建立简单的专家顾问和指标(没有特殊功能),那么它是值得的,我认为。 Ilya Malev 2019.01.25 15:04 #75 Alexey Navoykov:我真的不明白为什么不执行就不能声明?多年来,MQL一直支持抽象类方法。因为像这样的条目会导致编译错误。 class A { public: virtual int f1() = 0; virtual int f2() = 0; }; class B: public A { public: virtual int f1(){ return 1; } }; void OnStart() { B b; } Alexey Navoykov 2019.01.25 15:11 #76 Ilya Malev:因为像这样的条目会引起编译时的错误。而那个人认为在MQL中根本不可能声明这样的方法,就我对他的帖子的理解 而言。 Ilyas 2019.01.25 15:31 #77 很少有人知道(知道并使用它的人更少),但纯虚拟的函数 可以有一个主体 class A { public: virtual int f1() = 0; virtual int f2() = 0 { return(0); } }; 它们也必须在子类中被重载 Ilya Malev 2019.01.25 15:34 #78 Ilyas:很少有人知道(更少有人知道并使用),但纯粹的虚拟函数 可以有一个主体 它们也必须在子类中被重载那么接口仍然可以有自己的方法代码?它能以某种方式被调用吗?) 最近刚看到这个... Alexey Navoykov 2019.01.25 15:51 #79 嗯,有趣的功能......我认为这是一个默认的实现,可以在后代中作为A::f2()调用,即。class B : public A { virtual int f2() { return A::f2(); } }; p.s. 我现在试了一下......即使A::f2()没有主体,编译器也不会对这样的调用做出反应。 也就是说,我必须在以后的运行时间中捕捉到一个错误。 没办法。 Ilya Malev 2019.01.25 15:54 #80 Alexey Navoykov: 嗯,有趣的功能......我猜这是一个默认的方法,只是在A::f2()的后代中调用它。测试了一下--你总体上是对的=)阿列克谢-纳沃伊科夫。 p.s. 虽然我现在已经试过了......即使A::f2()没有主体,编译器对这样的调用也没有反应。我的反应是 "堆栈溢出" )显然,这毕竟是一只蟑螂...... class A { public: virtual int f1() = 0 { return 1; } virtual int f2() = 0; }; class B: public A { public: virtual int f1(){ return A::f1(); } virtual int f2(){ return A::f2(); } }; void OnStart() { A*a=new B; Print(a.f1()); Print(a.f2()); } 123456789101112131415...28 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你指的是他们的标准库 吗?)
不,我的意思是,在MQL中,你不能声明一个没有实现的抽象虚拟方法。在MQL中,基类的虚拟方法必须始终有一个实现,这就充满了你提到的问题。
在C#中没有很多基本的基础接口
事实上,有很多。
在我看来,这并不全是坏事。在我看来,C#中没有那么多基本的主接口(我不是C#专家),你不能把它们的方法减少到一个基本的超类,然后继承你需要的东西。
P.S. 要想通过<<<<>>>> 这样的结构来实现一些多重的东西,是有点麻烦的。最好通过运算符来做函数,例如a==b调用a.compareto( b ),a[compareer]==b调用compareer.compare(a,b)等。我认为,这将是一个可怕的混杂物。
+ 调用虚拟方法是不自由的。不,我的意思是,在MQL中,你不能声明一个没有实现的抽象虚拟方法。在MQL中,基类的虚拟方法必须始终有一个实现,这就充满了你提到的问题。
我不知道为什么你不能在没有实施的情况下声明它?多年来,MQL一直支持抽象类方法。
1.事实上,有很多这样的人。
2.我认为,这将是一个可怕的混杂物。
+ 对虚拟方法的调用是不自由的。1.我就知道。
2.让我们看看会发生什么,如果我设法把我现在做的事情做好,我会在论坛上发表)。
不是免费的,是的。任何通用的OOP解决方案都是昂贵的,但如果你的目的是轻松和漂亮地建立简单的专家顾问和指标(没有特殊功能),那么它是值得的,我认为。
我真的不明白为什么不执行就不能声明?多年来,MQL一直支持抽象类方法。
因为像这样的条目会导致编译错误。
因为像这样的条目会引起编译时的错误。
而那个人认为在MQL中根本不可能声明这样的方法,就我对他的帖子的理解 而言。
很少有人知道(知道并使用它的人更少),但纯虚拟的函数 可以有一个主体
它们也必须在子类中被重载
很少有人知道(更少有人知道并使用),但纯粹的虚拟函数 可以有一个主体
它们也必须在子类中被重载
那么接口仍然可以有自己的方法代码?它能以某种方式被调用吗?)
最近刚看到这个...
p.s. 我现在试了一下......即使A::f2()没有主体,编译器也不会对这样的调用做出反应。 也就是说,我必须在以后的运行时间中捕捉到一个错误。 没办法。
嗯,有趣的功能......我猜这是一个默认的方法,只是在A::f2()的后代中调用它。
测试了一下--你总体上是对的=)
p.s. 虽然我现在已经试过了......即使A::f2()没有主体,编译器对这样的调用也没有反应。
显然,这毕竟是一只蟑螂......