C++Primer 6.4节——函数重载(1)

C++Primer 6.4节——函数重载(1)

一、函数重载
1、函数重载的含义
①如果同一作用域内的几个函数的名字相同,但是形参列表不同,我们称之为重载函数。
②形参列表不同,指形参的数量或类型不同。
注意:不允许两个函数除了返回类型外其他所有的元素都相同。

二、重载函数中的const形参
需知的知识点:顶层const在拷贝时,不受什么印象。但底层const不能转换成其他类型,但是非常量可以转换成底层const。
1、当形参是顶层const时
①一个拥有顶层const的形参无法和一个没有顶层const形参相区别开。
②故函数之间只有形参是否是const的区别,是无法将这些函数构成重载函数的。

2、当形参是底层const,即指针常量或常量引用时
①可以通过区分其指向的是常量对象还是非常量对象可以实现函数重载。
②因为const不能转换成其他类型,所以我们只能把const对象传给const形参。
③虽然非常量对象或指向非常量的指针都可以传入形参不是const的函数和形参是const的函数,但是,当我们传递一个非常量对象或者指向非常量对象的指针时,编译器会优先选择非常量版本的函数。

三、重载函数中的const_cast使用
需知的知识点:const_cast能够添加或去掉运算对象的底层const。
1、可以利用const_cast将非底层const的实参转换成底层const实参,或者将底层const的实参转换成非底层const的实参。(非底层const是指除了顶层const外的所有对象)

四、调用重载的函数
1、定义重载函数后,要进行函数匹配,才能进行正确的函数调用。
2、函数匹配:是指一个过程,在这过程中,我们需将函数调用与重载函数中最符合的一个函数关联起来。
3、调用重载函数有三种可能的结果:
①编译器找到一个与实参最匹配的函数,称之为最佳匹配。
②编译器找不到与实参匹配的函数,称之为无匹配。
③编译器找到了多于一个函数与实参匹配的函数,但这些函数都不是最佳匹配,称之为二义性调用。

五、重载与作用域的关系
需知的知识点:如果我们在内层作用域中声明名字,它将隐藏外层作用域中声明的同名实体。
1、在不同的作用域中无法重载函数名。由需知的知识点可知。
2、一旦在当前作用域中找到了所需的名字,编译器就会忽略掉外层作用域中的同名实体。

你可能感兴趣的:(c++)