首页 > 试题广场 >

对C++中重载(overload)和重写(override)

[不定项选择题]
对C++中重载(overload)和重写(override)描述正确的有()
  • 重载是指在同一个类或名字空间中存在多个函数,它们的函数名相同,而函数签名不同
  • 重写是指在子类中实现一个虚函数,该虚函数与其父类中的一个虚函数拥有同样的函数签名
  • 虚函数不可以重载
  • 构造函数可以重载,析构函数可以重写

函数重载(overload)
函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是:
(1)相同的范围(在同一个作用域中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无(注:函数重载与有无virtual修饰无关);
(5)返回值可以不同;

函数重写(也称为覆盖 override)
函数重写是指子类重新定义基类的虚函数。特征是:
(1)不在同一个作用域(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有 virtual 关键字,不能有 static 。
(5)返回值相同,否则报错;
(6)重写函数的访问修饰符可以不同;

重定义(也称隐藏)
(1)不在同一个作用域(分别位于派生类与基类) ;
(2)函数名字相同;
(3)返回值可以不同;
(4)参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载以及覆盖混淆);
(5)参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆);

发表于 2019-12-28 16:35:46 回复(1)

构造函数不能为虚函数,析构函数可以虚函数,虚函数可以重写

发表于 2019-07-29 13:38:38 回复(1)
总觉的b有点问题。
函数签名的定义:

函数签名(或者类型签名,抑或方法签名)定义了函数方法的输入与输出。

签名可包含以下内容:

  • 参数及参数的类型
  • 一个的返回值及其类型
  • 可能会抛出或传回的异常
  • 该方法在面向对象程序中的可用性方面的信息(如public、static 或 prototype)。
但是重写的话可能输出不一样吧。
发表于 2020-03-18 11:45:02 回复(0)
函数签名(Signature):定义了函数的输入输出。 签名可包含以下内容: 参数及参数的类型 一个返回值及类型 可能会抛出或传回的异常 该方法在面向对象程序中的可用性方面的信息(如public、static或prototype)
发表于 2023-02-22 10:04:12 回复(0)
重载,同一类中函数名相同但是函数签名不同 函数签名包括 包括函数名、参数类型、参数个数、顺序以及它所在的类和命名空间 什么是重写 构造函数可以重载
编辑于 2019-12-01 08:44:53 回复(0)
a的返回类型不是可以不同吗?
发表于 2019-08-22 07:21:33 回复(3)
析构函数为虚函数有啥意义啊
发表于 2022-05-06 14:34:23 回复(2)
选项A中的“或命名空间”不对吧? 例如类A和类B属于同一命名空间,但它们里面有相同的函数,而且A和B没有继承关系,这时候还能称为重载吗?
发表于 2021-12-09 07:41:52 回复(0)
多选题,ABD都对。
发表于 2020-03-09 12:51:08 回复(0)