关于override和final小记

重写(overide)重载(overload)和隐藏(overwrite)在C++中是了个完全不 同的概念,但是在平时的工作交流中,我发现有很多 C++程序员对它们的慨念模嗎 不清,经常误用或者混用这了个概念,所以在说明 override 说明符之前。我们先梳理 下三者的区别:

  1. 重写(override)的意思更接近覆盖,在C++中是指派生类覆盖了基类的虚函数,这里的覆盖必须满足有相同的两数签名和返回类型,也就是说有相同的函数名, 形参列表以及返回类型。
  2. 重载(overload),它通常是指在同一个类中有两个或者两个以上函数,它们 的函数名相同,但是函数签名不同,也就是说有不同的形参。这种情况在类的构造 函数中最容易看到,为了让类更方便使用,我们经常会重载多个构造函数。
  3. 隐藏(overwrite)的概念也十分容易与上面的概念泥淆。隐藏是指基类成员函数,无论它是否为虚函数,当派生类出现同名函数时,如果派生类函数签名不 同于基类函数,则基类函数会被隐藏。如果派生类函数签名与基类函数相同,则需要确定基类函数是否为虛丽数,如果是虚函数,则这里的概念就是重写,否则基类 函数也会被隐藏。另外,如果还想使用基类函数,可以使用 using 关键词将其引入派生类。

override说明符在重写当中的作用,主要是告知编译器虚函数必须覆盖基类的虚函数,否则既会报错。

final说明符可以告诉编译器虚函数不能被派生类重写,避免被后续函数修改。同时final可以加在类定义后面,保证本类不能作为基类被继承。