一、基本概念
1、重载:
它是指同一访问区内被声明的几个具有不同参数列(类型、个数、顺序)的同名函数,根据参数列表确定调用哪个函数,不关心函数的返回类型。
例子:
class A {
public:
void test(int i);
void test(double d); //overload
void test(int i, double d); //overload
void test(double d, int i); //overload
int test(int i); //错误,非重载,注意重载不关心函数的返回类型
};
2、重写(覆盖):
它是指派生类中存在重新定义的函数,其函数名、参数列表、返回值类型,所有的都必须与其基类中被重写的函数一致,只有函数体不同。重写的基类中被重写函数必须有virtual修饰。
3、隐藏:
它是指派生类的函数屏蔽了其基类中的与之同名函数,只要函数名相同,不管参数列表和返回值类型,基类函数都会被隐藏。
4、重载与重写的区别:
(1)、范围区别:
重写和被重写的函数在不同的类中,重载和被重载的函数在同一类中。
(2)、参数的区别:
重写与被重写的函数参数列表一定相同,而重载与被重载的函数参数列表一定不同。
(3)、virtual的区别:
重写的基类必须要有virtual修饰,而重载与被重载函数可有可无virtual修饰。
5、隐藏与重写、重载的区别:
(1)、与重载范围不同:
隐藏函数和被隐藏函数在不同类中。
(2)、参数的区别:
隐藏函数和被隐藏函数参数列表可以相同,也可以不同,但函数名一定相同;当参数不同时,无论基类中的函数是否被virtual修饰,基类函数都是被隐藏,而不是重写。