重载函数
通常函数名反映它的作用。一般说来,可读程序包括各种挑选出来的标识符 。有时不同的函数用于同样的作用。例如,计算双精度数数组的平均值的函数,也会操作整数数组。都可以称为数组平均数AverageFromArray:
//+------------------------------------------------------------------+
|
每个函数通过 Print()函数输出信息;
Print("Calculation of the average for an array of int type"); |
程序选择与自变量类型及其数量一致的必需的函数。选择依据的规则,称为署名匹配算法。署名就是用于说明函数类型的列表。
示例:
//+------------------------------------------------------------------+
|
重载就是一个函数定义多值。根据函数接收的自变量类型选择特定的值。基于调用函数时对应的自变量列表选择特定的函数,到函数说明参数列表。
当调用重载的函数,程序必需有一个运算法则选择合适的函数。该算法是依据现有类型的转化完成这个选择。最佳关联是唯一的。至少对于一个自变量来说,是最好的,对其他相关的自变量也是一样。
以下就是每个自变量匹配的算法。
选择一个重载函数的运算法则
- 匹配严格(尽可能)。
- 尝试标准类型提高。
- 尝试标准类型转换。
标准类型提高好于其他标准转换。提高就是浮点型向双精度型转换,布尔型,字符型,短整型或者计数向整型转换。类似整型数组的类型转换也属于类型转换。相似类型有:布尔型,字符型,无符号字符型,这三种都是单字节整数;双字节整数是短整型和无符号短整型;4字节整数是整型,无字符整型,和颜色;长整型,无符号长整型,和日期时间。
当然,匹配严格是最好的。若要达到这样的一致性,就要使用类型转换。编译程序不能处理含糊状况。因此不能依靠类型的微妙不同点和使重载函数不明确的隐式变换。
如果怀疑,请使用显式转换确保严格相符。
MQL5中重载的函数可以在ArrayInitialize()函数示例中看到。
函数重载规则用于类函数重载 。
允许系统函数重载,但是要注意到编译程序可以准确的选择必要函数。例如,用三种不同方法重载系统函数 fmax(),但是仅有两个变量是正确的。
示例:
// 允许重载-在参数数字上不同
|
另见