当前位置: 首页 > news >正文

C/C++基础知识复习(36)

  • 函数重载是指在同一作用域内,定义多个同名但参数列表不同的函数。通过函数重载,程序员可以使用相同的函数名称处理不同类型或数量的参数,而不需要为每种情况创建不同的函数名称。编译器根据函数调用时传递的参数类型和数量来决定调用哪个版本的函数。

    函数重载的主要特性是:

    • 函数名称相同。
    • 函数的参数类型、数量或者顺序不同。
    • 返回类型不同并不能单独作为函数重载的依据。

    示例(C++ 语言):

    class Example { public: void print(int i) { std::cout << "整数: " << i << std::endl; } void print(double d) { std::cout << "浮点数: " << d << std::endl; } void print(const std::string& s) { std::cout << "字符串: " << s << std::endl; } 
    };

    在这个例子中,print 函数被重载了三次,分别接收整数、浮点数和字符串类型的参数。

  • 函数重载的实现原理

    函数重载的实现原理依赖于编译时的名称修饰(Name Mangling)。编译器在编译时会根据函数的名称、参数类型、参数数量以及参数的顺序等信息,自动生成一个唯一的符号(名称修饰),用于区分不同的重载版本。

    • 在 C++ 等语言中,编译器会为每个函数重载版本生成不同的名称。例如,print(int) 可能会被编译器转换为 print_intprint(double) 转换为 print_double,以此类推。这样,在链接阶段,编译器就能根据具体的调用参数选择正确的函数版本。

    • 在函数调用时,编译器会通过分析函数参数的类型、数量等信息来匹配最合适的重载版本。如果参数类型不完全匹配,编译器还会进行类型转换(如自动将整数转换为浮点数),选择最合适的重载版本。

    注意:虽然函数的返回类型不同可以作为区分,但单纯通过返回类型是无法实现函数重载的,因为返回类型不会影响编译器选择函数版本的规则。

    例如:

    int add(int a, int b) { return a + b; 
    } 
    double add(double a, double b) { return a + b; 
    }

    在这个例子中,两个 add 函数通过参数类型不同来区分。

http://www.lryc.cn/news/499647.html

相关文章:

  • JAVA |日常开发中连接Sqlite数据库详解
  • Java项目实战II基于微信小程序的消防隐患在线举报系统(开发文档+数据库+源码)
  • python编程Day12-属性和方法的分类
  • 【unity小技巧】在 Unity 中,Application获取各种文件路径或访问不同类型的存储路径
  • c++:timer
  • VSCode(四)CMake调试
  • 安装Docker并使用WSL
  • HCIA-openGauss_2_2连接与认证
  • 安装 pytorch lighting
  • 2024年12月7日历史上的今天大事件早读
  • ORB-SLAM2 ---- 非线性优化在SLAM中的应用(一)
  • FastAPI中创建一个多App架构
  • 计算机网络原理之HTTP与HTTPS
  • 完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)
  • vsphere vcenter web 界面的介绍
  • 【pyspark学习从入门到精通23】机器学习库_6
  • FPGA实战篇(呼吸灯实验)
  • 面经自测——自我介绍
  • 在 LS-DYNA 中将应力转换为用户定义的坐标系
  • 【Spark】 groupByKey与reduceByKey的区别
  • 数据库与数据库管理系统概述
  • (简单5步实现,免费且比GPT4.0更好用)部署本地AI大语言模型聊天系统:Chatbox AI + 马斯克grok2.0大模型
  • 滚珠螺杆导程的定义与重要性
  • 【特殊子序列 DP】力扣509. 斐波那契数
  • linux 架构详解
  • Spring Data Elasticsearch
  • OpenGL编译用户着色器shader
  • 过期策略、内存淘汰机制
  • Scala的正则表达式
  • 关于睡懒觉