1.函数重载;
作用域:函数重载的两个函数在同一个作用域中(即在同一个类中)
特点:函数重载的两个同名函数的形参一定不一样(参数个数,参数类型,参数顺序)。返回值不同而形参一致不能算作重载。
举例:
class A{//函数重载
public:
void test(int i){cout<<i<<endl;}
int test(int i,int j){cout<<i<<endl;}
void test(int i,int j,int z){cout<<i<<j<<endl;}
int test(int i){cout<<i<<endl;}//报错,函数的形参一定要不一样
};
2.函数重写(覆盖):
作用域:子类和父类之间的同名虚函数。
特点:函数名称,函数返回值,以及函数形参都要一样。只有函数体(大括号里面)不一样。这样可以实现多态。
3.函数重定义(隐藏):
作用域 : 子类和父类中同名函数。
特点:(1)不管是否是虚函数,当子类和父类中包含同名函数,但是函数参数不同,这个时候父类的函数会被隐藏起来。
(2)当父类中的同名函数为普通函数,子类中的同名函数参数相同的时候,父类的函数会被隐藏起来。
总结;
(1)重载:同一作用域(同一个类中);函数形参必须不一样。返回值无所谓。
(2)重写(覆盖):父类和子类,同名虚函数,函数返回值,形参以及名字一致,只有函数体不一致。
(3)重定义(隐藏):子类和父类,同名函数,当虚函数的时候,函数参数不一致,父类函数被隐藏;当普通函数的时候,只要名字一样就会被隐藏。