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

本文内容取自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结

重载的概念

重载(Overload)

  • 同一个标识符在不同的上下文有不同的意义
  • 如:
    • “洗”和不同的词搭配后有不同的含义
      如:洗衣服,洗脸,洗…


函数重载(Function Overload)

  • 用同一个函数名定义不同的函数
  • 当函数名和不同的参数搭配时函数的含义不同
    在这里插入图片描述

编程实验

函数重载初探
  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int func(int x)
  5 {
  6     return x;
  7 }
  8 
  9 int func(int a, int b)
 10 {
 11     return a + b;
 12 }
 13 
 14 int func(const char* s)
 15 {
 16     return strlen(s);
 17 }
 18 
 19 
 20 int main(int argc, char *argv[])
 21 {
 22     printf("%d\n", func(3));
 23     printf("%d\n", func(4, 5));
 24     printf("%d\n", func("Hello Func Overload!"));
 25 
 26     return 0;
 27 }

运行结果
在这里插入图片描述

通过实验结果可以看出,3个重名的函数都可以正常运行,函数发生了重载

函数重载至少满足以下一个条件

在这里插入图片描述
由于上面两个函数参数顺序不同,所以可以构成重载函数




函数默认参数遇上函数重载会发生什么?

在这里插入图片描述

从语法来看,上面两个函数都符合main中func的调用。

运行结果:
在这里插入图片描述

可以看到,编译时报错了,重载出现了二义性,有两个候选函数符合调用要求



编译器调用重载函数的准则
  • 将所有同名函数作为候选者
  • 尝试寻找可行的候选函数
    1.精确匹配实参
    2.通过默认参数能够匹配实参
    3.通过默认类型转换匹配实参
  • 匹配失败
    • 最终寻找到的候选函数不唯一,则出现二义性,编译失败。
    • 无法匹配所有候选者,函数未定义,编译失败。
函数重载的注意事项
  • 重载函数在本质上是相互独立的不同函数
  • 重载函数的函数类型不同
  • 函数返回值不能作为函数重载的依据

函数重载是由函数名参数列表决定的!




小结

  • 重载函数是C++中引入的概念
  • 重载函数用于模拟自然语言中的词汇搭配
  • 函数重载使得C++具有更丰富的主义表达能力
  • 函数重载的本质为相互独立的不同函数
  • C++中通过函数名函数参数确定函数调用
发布了42 篇原创文章 · 获赞 0 · 访问量 992

猜你喜欢

转载自blog.csdn.net/lzg2011/article/details/104342768