正确答案: A B D 你的答案: A B (错误)

  • 重载是指在同一个类或名字空间中存在多个函数,它们的函数名相同,而函数签名不同
  • 重写是指在子类中实现一个虚函数,该虚函数与其父类中的一个虚函数拥有同样的函数签名
  • 虚函数不可以重载
  • 构造函数可以重载,析构函数可以重写

解析:

  1. 网友1:
    函数重载(overload)
    函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是:
    (1)相同的范围(在同一个作用域中);
    (2)函数名字相同;
    (3)参数不同;
    (4)virtual 关键字可有可无(注:函数重载与有无virtual修饰无关);
    (5)返回值可以不同;
    函数重写(也称为覆盖 override)
    函数重写是指子类重新定义基类的虚函数。特征是:
    (1)不在同一个作用域(分别位于派生类与基类);
    (2)函数名字相同;
    (3)参数相同;
    (4)基类函数必须有 virtual 关键字,不能有 static 。
    (5)返回值相同,否则报错;
    (6)重写函数的访问修饰符可以不同;
    重定义(也称隐藏)
    (1)不在同一个作用域(分别位于派生类与基类) ;
    (2)函数名字相同;
    (3)返回值可以不同;
    (4)参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载以及覆盖混淆);
    (5)参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆);
  2. 网友2:
    构造函数不能为虚函数,析构函数可以虚函数,虚函数可以重写