Виртуальная функция, как и обычная функция, должна иметь исполняемое тело. При вызове семантика ее точно такая же, как и у остальных функций.
例子。
class Base {
private:
int a;
public:
virtualint Func1();
};
class Second: public Base {
public:
int Func2() {
return0;
};
};
intOnInit() {
Base* base = new Base();
Second* foo = new Second();
return(INIT_SUCCEEDED);
}
你已经把一切都想清楚了。使用一个NULL常数。
让我告诉你一个秘密,它已经实施了。你需要点击鼠标滚轮,会有一个十字准线。
你可以在很久以前就这样做。从导航器中,你把指标拖到已经连接了指标的窗口中。
IMHO,这不是最必要的事情。
你有一个导航器,你有收藏夹,你有模板,你有配置文件。一切都可以设置。阅读终端的帮助,你会发现很多东西!
枚举被用来使代码更易读,删除常量,用人类已知的实体取代它们。
例如,枚举ENUM_DAY_OF_WEEK的值可用于与结构MqlDateTime的day_of_week值进行比较。也就是说,你可以这样写
或者你可以用不同的方式来写。
SUNDAY是一个命名的int类型的常量,值为0。
酷!谢谢你的导航仪!没有太注意它。我通常把它关掉,这样就不会占用太多的空间。的帮助,哪怕只是一瞥,我都看了。它没有告诉我在图表窗口中拖动一个间接的,并且是在彼此的上面。虽然,我可以猜到它,并尝试....))
谢谢你解释了列举的性质!我很快就看完了,MQL主要是由C++衍生出来的,而且有很多对接的地方。但是,《帮助》中的大量错别字和不完整的文章是不可取的。
结果:正确书写的帮助可能有助于避免论坛上的傻瓜们提出很多愚蠢的问题!
就NULL而言,它是零--它被大量使用。但变量的最大值是非常少的,几乎没有。例如,一个变量在分析指标后存储三种状态:买入、卖出或空。如果我们使用现成的常数POSITION_TYPE_BUY,POSITION_TYPE_SELL,其中一个是零。我相信如果你把它推广到所有类型,EMPTY_VALUE会比NULL更受欢迎)。
还有一个无限有用的应用。比如说。
而用户得到一个下拉列表,可以选择你在评论中写的4个项目--"只买"、"只卖 "等。对于在用户设置窗口中列出一组指标、时间框架、一组条件等非常有用。
NULL部分是零,它经常被使用。例如,该变量在分析指标后存储三种状态:买入、卖出或空。如果我们使用准备好的常数POSITION_TYPE_BUY,POSITION_TYPE_SELL,其中一个是NULL。
没问题,你可以这样做。
并把它放在你想放的地方。
没问题,你可以这样做。
并把它放在你想要的地方。
这一切都很清楚。我不是这个意思。
那就解释一下你的意思?所有预定义数据类型 的单一常数?这样的事情不太可能被实施。
不幸的是,只有有经验的程序员才明白这种警告的作用和重要性。
好吧,我建议其他人对这种水平的编译器的帮助感到高兴,并修复自己的错误。这些都是真正的潜在错误的地方,正是对于新手开发者来说,学习是至关重要的。
几年前,论坛上已经有人提出了 "纯虚拟方法 "的话题。
即在C++的概念中,没有主体的虚拟方法必须在后代中被重写。
此外,一个包含此类方法的类会自动成为抽象的。编译器也会跟踪这一点。(嗯,这只是为了坚持标准,尽管你可以把构造函数隐藏在受保护的范围内)。
我们目前缺少大量的 "纯虚拟方法 "行为。如果没有这样的功能,你就不能正确地准备一个库或框架来外包它:你创建自己的子类(它不是白白的,而是像一个齿轮一样嵌入到其他类中),并好心地实现整个接口。现在,你继承了,但没有加入方法的实现,编译器就会吞掉它,什么都不能用。挖掘父类的源代码?
接口的概念是OOP的基本原理之一。因此,我真的希望看到在5中实现这样的东西,而不是在MQL6中。
顺便说一下,在关于虚拟函数的文档 中,有一个错误
例子。
Func1 虚函数没有可执行体(甚至没有返回值),但编译时没有错误。
几年前,论坛上已经有人提出了 "纯虚拟方法 "的话题。
也就是说,在C++的概念中,没有主体的虚拟方法,必须在后代中被重写。
此外,一个包含此类方法的类会自动成为抽象的。编译器也会跟踪这一点。(嗯,这只是为了坚持标准,尽管你可以把构造函数隐藏在受保护的范围内)。
我们目前缺少大量的 "纯虚拟方法 "行为。如果没有这样的功能,你就不能正确地准备一个库或框架来外包它:你创建自己的子类(它不是白白的,而是像一个齿轮一样嵌入到其他类中),并好心地实现整个接口。现在,你继承了,但没有加入方法的实现,编译器就会吞掉它,什么都不能用。挖掘父类的源代码?
接口的概念是OOP的基本原理之一。因此,我真的希望看到在5中实现这样的东西,而不是在MQL6中。
顺便说一下,在关于虚拟函数的文档 中,有一个错误
例子。
Func1 虚函数没有可执行体(甚至没有返回值),但编译时没有错误。
1.纯粹的虚拟函数将很快被加入
2.在你的例子中,Func1的调用在哪里?没有呼叫--没有身体控制。
1.纯粹的虚拟函数将很快被加入
2.你的例子中Func1的调用在哪里?没有呼叫--也没有身体控制。
VS 2015说了以下的话
严重程度 代码 描述 项目 文件 行 压制状态
错误 LNK2001 未解决的外部符号"public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyP\AvForex\trunk\TestCPPCode.obj 1
错误 LNK1120 1个未解决的外部因素 TestCPPCode C:\MyP\AvForex\trunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1
VS 2015说了以下的话
严重程度 代码 描述 项目 文件 行 压制状态
错误 LNK2001 未解决的外部符号 "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyP\AvForex\trunk\TestCPPCode.obj 1
错误 LNK1120 1个未解决的外部因素 TestCPPCode C:\MyP\AvForex\trunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1