1、重载
同一个类中的同名函数会重载;
重载函数的函数名相同,参数不同,不能用返回值判断是否是函数重载;
在不同类中的同名函数不是重载。
2、重定义(隐藏)
重定义发生在派生类和基类之间;
若派生类和基类有函数名相同的成员函数,但基类中没有用virtual关键字声明,则派生类成员函数为重定义;
若派生类和基类有函数名相同但参数不同的成员函数,则派生类成员函数为重定义;
重定义的派生类成员函数会隐藏基类中所有同名的成员函数。
3、重写(覆盖)
重写发生在派生类和基类之间;
若派生类和基类有函数原型相同的成员函数,并且基类用virtual关键字声明(基类成员函数用virtual关键字声明即可,而不管派生类成员函数是否用virtual关键字声明),则此成员函数为重写;
若派生类和基类有函数原型相同的成员函数,但基类中没有用virtual关键字声明,则为重定义;基类必须有virtual关键字,派生类中重写函数可以没有。
重写的派生类成员函数会覆盖基类中原型相同的虚函数。
4、隐藏和覆盖
隐藏
当派生类和基类函数名相同的成员函数没有声明为虚函数时,派生类的成员函数会隐藏基类的成员函数(会隐藏函数名相同的成员函数)
覆盖
当派生类和基类函数原型相同的成员函数声明为虚函数时,派生类的成员函数会覆盖基类的成员函数。(会覆盖函数原型相同的成员函数,对函数原型不同,函数名相同的成员函数会覆盖)