多态

重载、重写、隐藏

  1. 重载(Overload)

    • 概念:在同一个作用域内,使用相同的函数名,但参数列表不同的多个函数。重载函数可以有不同的参数类型、参数个数或参数顺序。
    • 特点:重载函数必须有不同的参数列表,不能仅仅依靠返回类型来区分。
  2. 重写(Override)

    • 概念:在派生类中重新定义基类中已经存在的虚函数,以实现多态性。派生类中的重写函数必须和基类中的原函数有相同的函数签名(即函数名、参数列表和返回类型都相同)。
    • 特点:通过重写虚函数,派生类可以在运行时替换掉基类中的虚函数,实现动态多态。
  3. 隐藏(Hide)

    • 概念:在派生类中定义一个和基类中的非虚函数同名的函数,导致基类的同名函数在派生类中不可见。

    • 特点:隐藏函数不会影响基类中同名函数的访问,但会隐藏掉基类中的同名函数,使其在派生类中不可见。

    • 在C++中的关键字是using

    • 在C#中的关键字是new

什么函数可以/不可以声明为虚函数

  1. 构造函数析构函数:构造函数和析构函数可以在类的继承层次结构中使用,但它们不能是虚函数。因为在构造对象和销毁对象时,虚函数机制不会起作用。对于构造函数,对象的类型是已知的,而对于析构函数,对象的析构顺序是由基类派生类依次调用的,不需要虚函数的动态绑定。

  2. 静态成员函数:静态成员函数与类关联,而不是与类的对象关联。因此,它们不属于任何对象的虚函数表,不能声明为虚函数。

  3. 非成员函数:非成员函数不属于任何类,因此不能声明为虚函数。