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

重载(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,那就是重写了)

 

 

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

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

尝试寻找可行的候选函数

精确匹配实参

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

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

匹配失败

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

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

 

 

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

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

posted @ 2021-02-02 10:33  will-z  阅读(141)  评论(0编辑  收藏  举报