重载(overload):

有所不同,不能出现参数个数和类型均相同。重载和函数成员是否是虚函数无关。

class A{
  ...
  virtual int fun();
  void fun(int);
  void fun(double, double);
  static int fun(char);
  ...
}

重写指的是在派生类中覆盖基类中的同名函数,重写就是重写函数体,要求基类函数必须是虚函数且:

  • 与基类的虚函数有相同的参数个数
  • 与基类的虚函数有相同的参数类型
  • 与基类的虚函数有相同的返回值类型
//父类
class A{
public:
  virtual int fun(int a){}
}
//子类
class B : public A{
public:
  //重写,一般加override可以确保是重写父类的函数
  virtual int fun(int a) override{}
}

隐藏指的是某些情况下,派生类中的函数屏蔽了基类中的同名函数,包括以下情况:

  • 两个函数参数相同,但是基类函数不是虚函数。和重写的区别在于基类函数是否是虚函数。
  • 两个函数参数不同,无论基类函数是不是虚函数,都会被隐藏。和重载的区别在于两个函数不在同
    一个类中。