首页 > 试题广场 >

下列关于多态性说法不正确的是:

[不定项选择题]
下列关于多态性说法不正确的是:
  • 重载是指函数名相同,但是参数不同
  • overload 和 override 是一个意思
  • 多态有静态多态和动态多态两种,虚函数属于静态多态
  • c++中 final 关键字表示函数不能再次被override

1.重载和重写的区别:

重载overload:在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态。

 

重写override:也叫覆盖,子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,重写函数的访问修饰符可以不同,尽管virtual是private的,子类中重写函数改为public,protected也可以,体现了多态。


2、多态性
 a编译时多态性:通过重载函数实现 。
 b运行时多态性:通过虚函数实现。


个人看法:从上面意思看,B、C明显不正确;A选项意思没错。关于D选项,参考https://www.cnblogs.com/fewolflion/p/12968629.html可以知道,final关键字,用于限制某个类不能被继承,或者某个虚函数不能被重写,所以也是正确的。
发表于 2020-08-05 12:46:50 回复(2)

多态分为两类

  • 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名
  • 动态多态: 派生类虚函数实现运行时多态

静态多态和动态多态区别:

  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址
  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址
发表于 2021-05-27 10:23:31 回复(0)
A选项不完全对,参数也可以相同。一个为const,一个为非const
发表于 2021-06-27 17:50:28 回复(1)

C++11的关键字final有两个用途。第一,它阻止了从类继承;第二,阻止一个虚函数的重写。


发表于 2021-11-27 09:26:17 回复(0)
a选择不完全正确吧,参数可以相同,可以是不同顺序f(int,float)和f(float,int)也是满足overload,只要满足名字修饰可以区别即可
发表于 2023-04-24 16:42:29 回复(0)
按照答案来说,参数不同就是个数,类型不同呗
发表于 2022-10-24 18:04:44 回复(0)
  • 重载是指函数名相同,但是参数不同         :不是还要求在同一作用域吗
发表于 2022-08-06 10:13:09 回复(0)
D选项不严谨,final关键字也可以修饰类,表示类不能被继承
发表于 2021-04-01 20:38:41 回复(0)
final用于类不被继承,虚函数不被重写
发表于 2021-02-10 16:51:42 回复(0)