1.5.3 重载函数-MQL5编程参考文档-峰汇在线
诚信为本
量力而为
当前位置:峰汇在线 > MQL语言 > MQL5编程参考文档 > 正文

1.5.3 重载函数

通常函数名反映它的作用。一般说来,可读程序包括各种挑选出来的标识符 。有时不同的函数用于同样的作用。例如,计算双精度数数组的平均值的函数,也会操作整数数组。都可以称为数组平均数AverageFromArray:

//+------------------------------------------------------------------+
//| 双精度类型数组的平均数计算 |
//+------------------------------------------------------------------+
double AverageFromArray(const double array[],int size)
{
if(size<=0) return 0.0;
double sum=0.0;
double aver;
//---
for(int i=0;i<size;i++)
{
sum+=array[i]; // 添加到双精度型
}
aver=sum/size; // 正好总数被数字除
//---
Print("Calculation of the average for an array of double type");
return aver;
}
//+------------------------------------------------------------------+
//| 整型数组的平均数计算 |
//+------------------------------------------------------------------+
double AverageFromArray(const int array[],int size)
{
if(size<=0) return 0.0;
double aver=0.0;
int sum=0;
//---
for(int i=0;i<size;i++)
{
sum+=array[i]; // 添加到双精度
}
aver=(double)sum/size;// 给予双精度类型总值,并且相除
//---
Print("Calculation of the average for an array of int type");
return aver;
}

每个函数通过 Print()函数输出信息;

Print("Calculation of the average for an array of int type");

程序选择与自变量类型及其数量一致的必需的函数。选择依据的规则,称为署名匹配算法。署名就是用于说明函数类型的列表。

示例:

//+------------------------------------------------------------------+
//| 脚本程序启动函数 |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int a[5]={1,2,3,4,5};
double b[5]={1.1,2.2,3.3,4.4,5.5};
double int_aver=AverageFromArray(a,5);
double double_aver=AverageFromArray(b,5);
Print("int_aver = ",int_aver," double_aver = ",double_aver);
}
//--- 脚本结果
// 为整型数组计算平均值
// 为双精度型数组计算平均值
// 整型 平均值= 3.00000000 双精度 平均值= 3.30000000

重载就是一个函数定义多值。根据函数接收的自变量类型选择特定的值。基于调用函数时对应的自变量列表选择特定的函数,到函数说明参数列表。

当调用重载的函数,程序必需有一个运算法则选择合适的函数。该算法是依据现有类型的转化完成这个选择。最佳关联是唯一的。至少对于一个自变量来说,是最好的,对其他相关的自变量也是一样。

以下就是每个自变量匹配的算法。

选择一个重载函数的运算法则
1.匹配严格(尽可能)。
2.尝试标准类型提高。
3.尝试标准类型转换。

标准类型提高好于其他标准转换。提高就是浮点型向双精度型转换,布尔型,字符型,短整型或者计数向整型转换。类似整型数组的类型转换也属于类型转换。相似类型有:布尔型,字符型,无符号字符型,这三种都是单字节整数;双字节整数是短整型和无符号短整型;4字节整数是整型,无字符整型,和颜色;长整型,无符号长整型,和日期时间。

当然,匹配严格是最好的。若要达到这样的一致性,就要使用类型转换。编译程序不能处理含糊状况。因此不能依靠类型的微妙不同点和使重载函数不明确的隐式变换。

如果怀疑,请使用显式转换确保严格相符。

MQL5中重载的函数可以在ArrayInitialize()函数示例中看到。

函数重载规则用于类函数重载 。

允许系统函数重载,但是要注意到编译程序可以准确的选择必要函数。例如,用三种不同方法重载系统函数 fmax(),但是仅有两个变量是正确的。

示例:

 

// 允许重载-在参数数字上不同
double fmax(double a,double b,double c);

// 错误重载
// 参数是不同的,但是最后一个有默认值
// 这就导致系统函数的隐藏,不可接受调用
double fmax(double a,double b,double c=DBL_MIN);

// 通过参数类型正常重载
int fmax(int a,int b);
打赏
版权所有转载请注明标题及链接:峰汇在线 » 1.5.3 重载函数
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏