C++助教篇3_Week2不完全知识点
发布日期:2021-05-08 04:54:04 浏览次数:23 分类:精选文章

本文共 1468 字,大约阅读时间需要 4 分钟。

多态与函数重载

多态的概念

多态是面向对象编程中的一个重要概念,字面意思是“多种状态”。在C++中,多态主要体现在接口的多种不同的实现方式上。可以用“打”这个字来类比,打字有很多种意思,分别对应不同的函数实现。

C++中的表现形式

C++中的多态主要体现在以下两个方面:

  • 函数的多态性:允许具有不同功能的函数使用相同的函数名,从而通过编译时的函数名调用不同的函数。
  • 对象行为的多态性:允许将父对象赋值为其子对象的引用,子对象的行为会影响父对象的行为。
  • 多态的实现角度

    从系统实现的角度来看,多态可以分为静态多态性和动态多态性两种:

  • 静态多态性:在程序编译时就知道调用的函数的全部信息,称为编译时多态性。
  • 动态多态性:在程序运行时动态确定调用的函数,称为运行时多态性。
  • 函数重载

    函数重载是C++中实现多态的一种重要方式,允许多个同名函数共存,但每个函数的参数必须有所不同。参数的个数、类型或顺序至少有一个与其他函数不同。

    函数重载的理解

  • 函数重载是一种多态现象。
  • 编译原理:重载函数符号表中的函数名会有所不同,例如:
    int sum(int a, int b, int c);int sum(int a, int b);float sum(float a, float b, float c);
  • 函数重载常用于实现功能类似但处理数据类型不同的问题。
  • 编译器选择最合适的重载函数的过程称为重载决策。
  • 函数重载的规则

  • 函数名称必须相同。
  • 参数列表必须不同(个数、类型或顺序至少有一个不同)。
  • 返回类型可以相同也可以不同。
  • 只有返回类型不同不足以成为函数重载。
  • 构造函数也可以被重载,只要形参列表不同。
  • 注意引用参数的格式。
  • 函数重载的最佳匹配

    在有多个重载函数可以匹配的情况下,编译器会根据参数类型的隐式转换排序,选择最合适的函数。例如:

    void f(int i);void f(long int li);void f(char *p);void f(double d, int i);

    调用 f(0) 时,0 可以被看作 intlong intchar* 类型。编译器会选择最合适的函数。

    函数重载的注意事项

  • 每个类必须有一个构造函数,未定义构造函数时会使用默认构造函数。
  • 函数名的功能应保持一致,不要用同一函数名实现完全不相关的功能。
  • 构造函数的形参列表必须唯一。
  • 默认参数值功能

    在定义函数时,可以为形参赋默认值,函数调用时可以省略这些参数。默认参数值的规则如下:

  • 默认参数值必须从右往左写。
  • 一旦开始使用默认参数值,后续参数也必须使用默认值。
  • 默认参数值只允许在函数声明时设置,不允许在函数定义时再次设置。
  • 引用

    引用是给变量起一个别名,常用于函数形参。引用变量和其所指向的变量指向相同内存地址。C++中的引用符号 & 有两个含义:

  • 取地址符号:b = &a; 表示 b 指向 a 的地址。
  • 引用符号:int b = a; 表示 ba 的引用。
  • 引用与指针的区别

  • 引用和指针的本质不同,引用是别名,指针是地址。
  • 引用只能引用已存在的对象,不允许空引用。
  • 引用在编译时需要初始化,不允许先声明后赋值。
  • 引用可以用在函数形参中,避免拷贝大型对象。
  • 引用自增操作与指针自增操作不同,引用操作会递增引用变量的值。
  • 总结

    多态和函数重载是C++编程中的核心概念,理解它们是掌握面向对象编程的关键。通过合理使用多态和函数重载,可以编写更高效、更灵活的代码。在使用默认参数值和引用时,需要遵守相应的规则,确保代码的正确性和安全性。

    上一篇:pre-binary 安装docker
    下一篇:语义化版本编号(Semantic Versioning)

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年03月26日 01时30分39秒