函数重载是同名函数完成近似的操作,既然是同名的函数,编译器就不能通过函数名来区分它们,则需要其他方式区分,区分方式有三种:
1.形参个数:
这很好理解,就是一个形参个两个形参的同名函数,编译器会将形参编译到方法标识中,使得一个参数与两个参数的方法标识不同,靠此来区分。
2.形参的类型:
编译器在编写方法标识时,会将不同类型的形参编写为不同的字母,使得方法标识相区分。
3.形参的顺序:
形参的顺序不可以是相同数据类型,因为相同数据类型的顺序变化只不过是形参名称的改变而已,并不能区分方法,但如果不同数据类型的形参改变位置,根据2的解释,假设编译器将Len(int i,char a)的标识编写为lenia,而将Len(char a ,int i)的标识编写为lenai,这样是可以区分方法的。
方法重载的本质就是编译器对方法编写标识的方式,如果不能通过方法标识区分的方法则会被编译器认为是同一个方法,就会报错,如两个方法,参数个数相同,参数数据类型相同,参数顺序相同,所不同的是返回值的类型不同,编译器编译方法标识的时候,并不把返回值的类型编译到方法标识中,所以在编译期看来这是同一个方法。