一、重载
概念:重载是指相同的范围中(例如一个类)不同的函数使用相同的函数名,但是函数的参数个数或类型或顺序不同。调用的时候根据函数的参数来区别不同的函数。重载函数的返回值可相同也可不同。重载在编译期就可以确定了。
注意重载是C++中独有的C语言中没有重载,要追究这一问题那就需要从编译的角度去分析这两者的不同。例如void fun(int a,int b);
这个函数在C++和C编译后的符号是不同的,C++经过编译器编译后所产生的符号为_fun_int_int,而C语言在编译器编译过后所产生的符号为_fun。从上面可以看出C++是根据函数名和参数列表来确认一个函数的与返回值没有关系,而当函数名相同参数列表不同的两个函数对C++来说是不同的两个函数。
举例说明重载的实现:
class A{
public:
void Fun(int i);
void Fun(double i); //可以
void Fun(int i, double j); //可以
void Fun(double i, int j); //可以
int Fun(int i); //不可以
};
上面的代码中第2、3、4都可以实现重载但最后一个不可以,因为C++不会根据返回值类型来确认一个函数。
二、覆盖
所谓的覆盖(重写)