初学者的问题 MQL5 MT5 MetaTrader 5 - 页 192 1...185186187188189190191192193194195196197198199...1503 新评论 Maxim Khrolenko 2014.02.09 19:00 #1911 我已经开始学习OOP,但无法克服以下障碍。下面的脚本是一个例子。CSum result; void OnStart() { //--- } //+----------------------------------------+ class CSum { public: int Calculate(int A,int B); }; //--- int CSum::Calculate(int A,int B) { return(A+B); }如果没有 "CSum result; "一行,编译器就不会产生错误。但它会导致一个错误。请告诉我什么是错的。我似乎已经正确地声明了这个类对象。 Vasiliy Sokolov 2014.02.09 19:25 #1912 paladin800:我已经开始学习OOP,但无法克服以下障碍。下面的脚本是一个例子。如果没有 "CSum result; "一行,编译器就不会产生错误。但它会导致一个错误。请告诉我什么是错的。我似乎已经正确地声明了这个类对象。 一个CSum(结果)类型的变量是在CSum描述完成之前声明的,这意味着编译器还不知道这个类型。在文件的最开始插入CSum。 Vasiliy Sokolov 2014.02.09 19:30 #1913 Lone_Irbis: 另外,全局变量 系统可以/应该被利用到什么程度?是否有可能以这种方式超载,或者有一个限度?例如,让我们说两个或更多的数百个变量(其中约有一半变成输入和返回,这取决于哪一段代码需要测试)和全局级别的约十几个小数组--是很多还是很少?^^' 那如果在你微调系统时,有两到三倍的人呢?而且,如果我们不必如此得寸进尺,是否有更简单的方法来处理十几个不同子系统之间的数据交换,其中许多子系统需要彼此的结果? 不,没有。全局变量被用于其他目的。使用类来描述子系统。而且你最好完全避免使用数组和全局变量。 Maxim Khrolenko 2014.02.09 19:38 #1914 C-4: CSum(结果)类型的变量--是在CSum描述之前声明的,这意味着编译器还不知道这个类型。在文件的最开始插入CSum。 哎呀,成功了。我通过类比函数的位置,把类放在了代码的最后。我没有想到,对于一个班级来说,这样的排序会产生不同的效果。 Vasiliy Sokolov 2014.02.09 19:58 #1915 paladin800: 哎呀,成功了。我把类放在代码的最后,类似于函数的位置。我没有想到,这样的排序会给班级带来变化。 是的,不幸的是,优先权的顺序确实很重要。最难的情况是两个班级同时使用对方。无论我们先引入什么类,第二个类都会被编译器发现并产生一个错误。在这种情况下,你不能不做类声明。在你的情况下,最好将CSum分离成一个单独的文件,例如Sum.mqh,并使用#include "Sum.mqh "口令将其包含在内。 Lone_Irbis 2014.02.09 23:34 #1916 C-4: 不,你不应该。全局变量被用于其他目的。使用类来描述子系统。而且,最好根本不使用数组和全局变量。 当然,我明白使用类是个好主意,但我还是有点懒,考虑到没有类会更熟悉,而且它们似乎在任何情况下都能发挥作用。但我只是好奇,他们的优势在哪里?只要人们确信代码是由一个作者专门为自己写的,并且在特定的程序之外永远不会有用?一直以来,似乎只有当你为某人/某事/某物写作时,上课才有意义,而对于你自己来说,作为一种爱好,不会有太大的区别。除了美学和一般的 "一般 "之外,参与所有这些类-结构有什么实际意义吗?速度?还有什么事吗? Artyom Trishkin 2014.02.09 23:51 #1917 Lone_Irbis: 当然我明白,处理类的问题会很好,但我还是很懒,考虑到没有类的问题会更熟悉,而且无论如何它们似乎都能发挥作用。但我只是好奇,他们的优势是什么?只要人们确信代码是由一个作者专门为自己写的,并且在特定的程序之外永远不会有用?一直以来,似乎只有当你为某人/某事/某物写作时,上课才有意义,而对于你自己来说,作为一种爱好,不会有太大的区别。除了美学和一般的 "一般 "之外,参与所有这些类-结构有什么实际意义吗?速度?其他的东西?恰恰相反。当你写一个定制项目时,客户往往要求提供源代码。然后你必须从类中提取函数,并将其插入到源代码中。最好是给客户一个文件,而不是把你的库拖成一座山,其中包含大量的函数,这些函数在传递给客户的工作中并没有使用。也就是说,最好是按需使用结构化编程。为了你自己的需要,最好使用OOP--那里的一切都自给自足,你不必为转移源代码而烦恼。 Lone_Irbis 2014.02.10 01:16 #1918 artmedia70:恰恰相反。当你写一个定制项目时,客户往往要求提供源代码。然后你必须从类中提取函数,并将其插入到源代码中。最好是给客户一个文件,而不是把你的库拖成一座山,其中包含大量的函数,这些函数在传递给客户的工作中并没有使用。也就是说,对于客户来说,最好使用结构化编程。为了你自己的需要,最好使用OOP--你所有的东西都在那里,而且你不必为转移源代码而烦恼。嗯...嗯,也许是这样 :)当然,这个原则看起来很诱人......。在理论上。特别是考虑到我不能做一个没有任何结构或类的单一文件。问题是,我写作主要是出于兴趣,测试自己的随机理论,发明无尽的自行车。同时,我只研究开始需要实施这个想法的东西。所有这一切都发生在一个单一的学习和实验性专家顾问的框架内--最初是一个简单的马汀,但现在它更像是一个多功能的黄牛在萌芽状态(而且理论上已经盈利)。因此,在某些时候,机器人变得微不足道地太大。>.> 当大部分时间都花在滚动鼠标轮寻找正确的代码时,我有了一个 "天才 "的想法,把它做成独立的文件(目前有13个部分可以连接),只是按照一般的概念把功能分组。像这里的新闻解析器,那里的水平处理,另一个有麋鹿控制器,单独的统计,等等。但当时我对处理OOP的热情还不够......因此,我的问题,显然是,我只是抓住我想出的每一个想法,并在现有的机器人上进行修改,而不是在一个相当...混乱的序列。其结果相当怪异,有各种开关和组合模式,其中许多都没有做。整个画面被一百五十个全局变量 所补充,这些变量必须从输入中删除,只是为了不花那么多时间,在一开始就被印在测试器的显象器中。当然,还有堆积如山的垃圾和被放弃或重新设计的想法的雏形。而现在似乎是一个很好的时间来整理所有这些垃圾,并把所有东西都归入类中(首先至少要读完一篇关于OOP的文章,而不要在这个过程中睡着)......但我对需要完成的工作量感到困惑,嗯,它与整个事情的潜在意义的关系。这是对所有课程的总结--它似乎不是那么体积化的任务。但是,如果,举例来说,把一排的所有东西都倾倒在公共场合,忽略所有这些私人/受保护的东西,这有意义吗?这比有一个文件夹,里面有一堆.mph和十几个常见的函数,如果它们无论如何都会在一个机器人中结束,那怎么会好呢? Artyom Trishkin 2014.02.10 01:27 #1919 Lone_Irbis:我建议你做一个单一的模板,它已经有所有必要的初始化、连接、收集总是需要的数据等步骤。一个意想不到的想法涌上心头--加载一个模板,重新命名,只在其中写上与该特定想法相关的内容。而那些你总是使用的函数,在任何代码中,在任何情况下返回相同的数据--把它们放在类中。一切都会一下子落到实处。你也可以构建目录。在 \experts\中创建(我是这样做的)一个名为订单的文件夹,我还把属于不同客户的所有文件放在不同的文件夹中,有一个名为想法、测试等的文件夹。通过这种方式,你可以使事情保持有序。 Vasiliy Sokolov 2014.02.10 10:51 #1920 不幸的是,即使正式学习了OOP,你也无法构建一个OOP程序。相反,你需要深入了解这种方法的哲学,这是在获得正式知识之后的下一个层次。因此,事实证明,你真的需要它吗?但如果你问如何做得更好,这意味着你觉得你选择的方式不是最佳的。在任何情况下,选择权在于你。 1...185186187188189190191192193194195196197198199...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我已经开始学习OOP,但无法克服以下障碍。下面的脚本是一个例子。
如果没有 "CSum result; "一行,编译器就不会产生错误。但它会导致一个错误。
请告诉我什么是错的。我似乎已经正确地声明了这个类对象。
我已经开始学习OOP,但无法克服以下障碍。下面的脚本是一个例子。
如果没有 "CSum result; "一行,编译器就不会产生错误。但它会导致一个错误。
请告诉我什么是错的。我似乎已经正确地声明了这个类对象。
另外,全局变量 系统可以/应该被利用到什么程度?是否有可能以这种方式超载,或者有一个限度?例如,让我们说两个或更多的数百个变量(其中约有一半变成输入和返回,这取决于哪一段代码需要测试)和全局级别的约十几个小数组--是很多还是很少?^^' 那如果在你微调系统时,有两到三倍的人呢?而且,如果我们不必如此得寸进尺,是否有更简单的方法来处理十几个不同子系统之间的数据交换,其中许多子系统需要彼此的结果?
CSum(结果)类型的变量--是在CSum描述之前声明的,这意味着编译器还不知道这个类型。在文件的最开始插入CSum。
哎呀,成功了。我把类放在代码的最后,类似于函数的位置。我没有想到,这样的排序会给班级带来变化。
不,你不应该。全局变量被用于其他目的。使用类来描述子系统。而且,最好根本不使用数组和全局变量。
当然我明白,处理类的问题会很好,但我还是很懒,考虑到没有类的问题会更熟悉,而且无论如何它们似乎都能发挥作用。但我只是好奇,他们的优势是什么?只要人们确信代码是由一个作者专门为自己写的,并且在特定的程序之外永远不会有用?一直以来,似乎只有当你为某人/某事/某物写作时,上课才有意义,而对于你自己来说,作为一种爱好,不会有太大的区别。除了美学和一般的 "一般 "之外,参与所有这些类-结构有什么实际意义吗?速度?其他的东西?
恰恰相反。当你写一个定制项目时,客户往往要求提供源代码。然后你必须从类中提取函数,并将其插入到源代码中。最好是给客户一个文件,而不是把你的库拖成一座山,其中包含大量的函数,这些函数在传递给客户的工作中并没有使用。也就是说,最好是按需使用结构化编程。
为了你自己的需要,最好使用OOP--那里的一切都自给自足,你不必为转移源代码而烦恼。
恰恰相反。当你写一个定制项目时,客户往往要求提供源代码。然后你必须从类中提取函数,并将其插入到源代码中。最好是给客户一个文件,而不是把你的库拖成一座山,其中包含大量的函数,这些函数在传递给客户的工作中并没有使用。也就是说,对于客户来说,最好使用结构化编程。
为了你自己的需要,最好使用OOP--你所有的东西都在那里,而且你不必为转移源代码而烦恼。
嗯...嗯,也许是这样 :)当然,这个原则看起来很诱人......。在理论上。特别是考虑到我不能做一个没有任何结构或类的单一文件。问题是,我写作主要是出于兴趣,测试自己的随机理论,发明无尽的自行车。同时,我只研究开始需要实施这个想法的东西。所有这一切都发生在一个单一的学习和实验性专家顾问的框架内--最初是一个简单的马汀,但现在它更像是一个多功能的黄牛在萌芽状态(而且理论上已经盈利)。因此,在某些时候,机器人变得微不足道地太大。>.> 当大部分时间都花在滚动鼠标轮寻找正确的代码时,我有了一个 "天才 "的想法,把它做成独立的文件(目前有13个部分可以连接),只是按照一般的概念把功能分组。像这里的新闻解析器,那里的水平处理,另一个有麋鹿控制器,单独的统计,等等。但当时我对处理OOP的热情还不够......
因此,我的问题,显然是,我只是抓住我想出的每一个想法,并在现有的机器人上进行修改,而不是在一个相当...混乱的序列。其结果相当怪异,有各种开关和组合模式,其中许多都没有做。整个画面被一百五十个全局变量 所补充,这些变量必须从输入中删除,只是为了不花那么多时间,在一开始就被印在测试器的显象器中。当然,还有堆积如山的垃圾和被放弃或重新设计的想法的雏形。
而现在似乎是一个很好的时间来整理所有这些垃圾,并把所有东西都归入类中(首先至少要读完一篇关于OOP的文章,而不要在这个过程中睡着)......但我对需要完成的工作量感到困惑,嗯,它与整个事情的潜在意义的关系。这是对所有课程的总结--它似乎不是那么体积化的任务。但是,如果,举例来说,把一排的所有东西都倾倒在公共场合,忽略所有这些私人/受保护的东西,这有意义吗?这比有一个文件夹,里面有一堆.mph和十几个常见的函数,如果它们无论如何都会在一个机器人中结束,那怎么会好呢?
我建议你做一个单一的模板,它已经有所有必要的初始化、连接、收集总是需要的数据等步骤。
一个意想不到的想法涌上心头--加载一个模板,重新命名,只在其中写上与该特定想法相关的内容。而那些你总是使用的函数,在任何代码中,在任何情况下返回相同的数据--把它们放在类中。一切都会一下子落到实处。你也可以构建目录。在 \experts\中创建(我是这样做的)一个名为订单的文件夹,我还把属于不同客户的所有文件放在不同的文件夹中,有一个名为想法、测试等的文件夹。
通过这种方式,你可以使事情保持有序。