使用
# 构造器
类实例化对象时,构造函数将自动执行。 构造函数用于初始化对象内部变量。
如果不显式声明构造函数,则会自动创建缺省的构造函数初始化变量。 不显示的默认构造函数。
在上一章中声明的CIndicator类中,我们手动创建了构造函数。 名字依然是CIndicator ()。 也就是说,我们的构造函数必须与类名相同。
构造函数不需要指定返回类型。 返回类型始终为void。 访问级别为公共。
紧凑的CIndicator构造函数如下:
类别指示器
{
公共:
指示器(;
//.
(; 以下示例显式声明构造函数。 只需将main[]数组存储为序列值。
是指示器:3360指示器(void )
{
阵列集系列(主,真);
{1}不需要生成器,也不需要创建,请记住系统已经准备好了。
构造函数还可以使其他构造函数变得复杂,例如参数化或初始化许多列表。 如果有构造函数,也有对应的析构函数。 对象被销毁时调用。 更多的APP可以在MQL5参考手册中阅读。
# 派生类 Derived Classes
面向对象还提供了继承这一非常有用的功能。 为了方便起见,可以使用一个类作为模板来创建另一个类。 继承类继承父类的所有方法和属性。 (当然,除了私有声明的属性和方法以外,不允许继承)。 可以在继承类中添加方法和属性。
举例说明这种继承关系和特性。
类CIMA :公共指示器
{
公共:
int init (字符串符号,枚举时间帧时间帧,整数序列时段,
int pMAShift,枚举方法,枚举应用价格;
(; CiMA类继承了CIndicator类并声明了新方法,Init ()、pMAShift )。
公共方法声明这两个方法是公开的,可以访问并且可以继承。
实施Init方法。
int CIMA :3360 init (字符串符号,枚举时间帧时间帧,整数序列周期,
int pMAShift,枚举方法,枚举应用价格)
{
handle=IMA(psymbol、pTimeframe、PMA期间、pMAShift、PMA方法、PMA价格);
返回(处理);
}Init方法的接收参数很多,请注意参数的数据类型。 方法的返回值为int类型。
在
# 虚拟方法 Virtual Functions
中,可能需要在继承类中修改方法,也可能需要在父类中定义方法,但可能会影响继承类的接口。 此时,需要“虚拟方法”。
以Car为例。 Class Car有一种叫ShiftGear的方法。 但是,ShiftGear的实现有手动方式和自动方式,实现方法完全不同。 在这种情况下,可以将ShiftGear ()声明为虚拟方法。 然后,在继承类内具体写入实现的详细内容。 很好地解决了这个问题。
举例说明:
类汽车
{
公共:
虚拟语言环境(int gear )返回) gear; }
(; 一定记得虚拟关键字。
以下是ShiftGear ()在继承类中的具体实现。
类手动汽车:公共汽车
{
公共:
intshiftgears(intgear );
(; 如您所见,重写ShiftGear方法变得很容易。 接收的参数和返回值必须与父类相同,并且方法名称也必须完全匹配。
如果继承类具有与父类完全相同的方法名称,则会复盖父类的方法。 这种在统一类中重写父类的方法的特性称为“多态性”!
还是以上面的CiMA类为例吧。 进行修改,将CIndicator的Init接口声明为虚拟类,并在继承类中实现。
类别指示器
{
受保护的:
智能手机;
公共:
虚拟初始化()返回)处理程序); }
(; 现在不需要修改CiMA,可以使用Init方法了。 如果类已经编写,则方法名称相同,将自动被复盖。
在
# 对象 Object
中,定义了移动平均值指示器CiMA。 接下来,创建类的几个实例对象。
CiMA objMa; 实例化对象时,将自动执行类的构造函数。 CiMA继承自CIndicator,而CIndicator的构造函数也继承自CiMA。 objMa是CiMA的实例,是在实例化时CiMA-CIndicator-Constrator自动执行的过程。 也就是说,情况如下。
是指示器:3360指示器(void )
{
阵列集系列(主,真);
{1}对象创建后,可以访问公共成员。 使用点(.)操作符。 首先,调用这个指示器的初始化方法。
obj ma.init (符号,0,符号,0,符号,符号价格); 观察上述代码,Init方法在CiMA内实现,调用iMA方法返回移动平均值,代入CiMA的保护变量handle。
它还声明了一个保护属性main[],用于存储指示符数据。 无法访问保护属性。 使用公共方法Main ()进行操作。
print(objma.main ) ) )如果需要,还可以在程序中创建许多对象。 实例化的时候,使用不同的名字就可以了。 这种面向对象的方法可以节省时间,避免大量重复代码,使程序看起来更简洁、更高效,在处理大量复杂的事务任务时非常有用。