第8课 - 函数重载分析(上)

一、重载

同一个标识符在不同的上下文有不同的意义;如:

“洗”和不同的词汇搭配后有不同的含义;如洗衣服,洗脸,洗脑,洗马桶。。。。。。

“play”和不同的单词搭配后有不同的含义;如play chess,play piano,play basketball…

二、C++中的函数重载

用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同 。如图1代码所示:

第8课 - 函数重载分析(上)

                        图1

函数重载至少满足下面的一个条件:

  1. 参数个数不同;
  2. 参数类型不同;
  3. 参数顺序不同;

C++编译器调用重载函数的准则,是将所有同名函数作为候选者,尝试寻找可行的候选函数,通过以下三个准则来匹配:

  1. 精确匹配实参;
  2. 通过默认参数能够匹配实参;
  3. 通过默认类型转换匹配实参;

重载函数匹配失败的情况如下:

  1. 最终寻找到的候选函数不唯一,则出现二义性,编译失败;
  2. 无法匹配所有候选者,函数未定义,编译失败;

重载函数匹配失败的代码如图2所示:

第8课 - 函数重载分析(上)

                    图2

三、函数重载的注意事项

重载函数在本质上是相互独立的不同函数,重载函数的函数类型不同,函数返回值不能作为函数重载的依据。函数重载是由函数名和参数列表决定的。图3的代码是分别打印重载函数的入口地址,执行结果如图4所示。得到了两个不同的地址,说明重载函数在本质上是相互独立的不同函数。

第8课 - 函数重载分析(上)

                                         图3

第8课 - 函数重载分析(上)

               图4

四、小结

  1. 函数重载是C++中引入的概念;
  2. 函数重载用于模拟自然语言中的词汇搭配;
  3. 函数重载使得C++具有更丰富的语义表达能力;
  4. 函数重载的本质为相互独立的不同函数;
  5. C++中通过函数名和函数参数确定函数调用。