首页 > 其他 > 详细

重载、重写(覆盖)、隐藏(重定义)

时间:2021-02-02 11:27:54      阅读:45      评论:0      收藏:0      [点我收藏+]

重载(Overload):

1.在同一个类内

2.参数不同( 参数个数不同、参数类型不同、参数顺序不同)

3.函数名相同

4.virtual关键字可有可无

5. 如果参数是指针, 或引用,那么const修饰也可以作为重载依据

具体查看博客:https://www.cnblogs.com/qingergege/p/7609533.html

6.const的另一种情况也能形成重载:

技术分享图片

注意:返回值不作为函数重载的依据

 

重写(Override)(覆盖):

1.不同类中

2.参数相同

3.函数名相同

4.基类必须有virtual

注:涉及虚表和虚表指针,虚函数指针这些; 

 

隐藏(重定义):

(1)

         1.不同类中

         2.类名相同

         3.参数不同

         4.无论有无virtual都是隐藏

(2)

         1.不同类中

         2.类名相同

         3.参数相同

         4.无virtual(因为此时如果有virtual,那就是重写了)

 

 

编译器调用重载函数的准则:

将所有同名函数作为候选者

尝试寻找可行的候选函数

精确匹配实参

通过默认参数能够匹配实参

通过默认类型转换匹配实参

匹配失败

最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。

无法匹配所有候选者,函数未定义,编译失败。

 

 

思考:当函数默认参数遇上函数重载会发生什么?

只要有二义性的就肯定连编译都不会通过;

重载、重写(覆盖)、隐藏(重定义)

原文:https://www.cnblogs.com/yaoguang-willZ/p/14360643.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!