码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ 学习 ::【基础篇:05】:C++ 函数重载认识及使用、简单介绍:C++ 支持函数重载的原因


    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下:

    1. 基础篇:类与对象(涉及C++的三大特性等);
    2. STL 篇:学习使用 C++ 提供的 STL 相关库;
    3. 高阶数据结构与算法篇: 手动实现自己的 STL 库 及 设计实现高阶数据结构,如 B树、B+树、红黑树等。

    学习集:

    • C++ 入门到入土!!!学习合集
    • Linux 从命令到网络再到内核!学习合集

    本期内容:C++ 函数重载


    目录:
    1. 函数重载的认识
    2. 函数重载示例
    3. 函数重载的注意点说明
    4. C++支持函数重载的原理
    5. 补充:编译器内函数重载提示


    【 C++学习合集链接 】


    1. 函数重载的认识

    函数重载:是函数的一种特殊情况,C++ 中允许再同一个作用域中声明几个功能相似的同名函数!这些函数的区别在于:形参列表不同!【 参数个数!参数类型!类型顺序!不同!!! 】


    2. 函数重载示例

    问题引入:若要求实现任意两个同类型值加和并返回结果。
    以 int 类型为例:
    C 语言中,我们会有如下设计及实现!

    int sum(int a, int b){
    	return a+b;
    }
    
    • 1
    • 2
    • 3

    若此时还要实现其他类型值的加和,我们就需要对 sum 函数名进行一定的标识,以防函数名相同引发错误!(多个函数不同命名,但功能相同,显得十分麻烦)


    C++ 中的函数重载完美实现了对该种情况的解决!如下是 C++ 下设计实现的函数!使用一个函数名即可(参数列表不同)

    int sum(int a, int b){
    	return a+b;
    }
    
    float sum(float a, float b){
    	return a+b;
    }
    
    double sum(double a, double b){
    	return a+b;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3. 函数重载的注意点说明

    • 从对函数重载的概念中可知,重载的关键区别在于形参列表不同!与函数返回值类型无关!
    • 关于调用:编译器会根据传递的参数进行自动匹配选择!
    • 形参列表不同在于:参数个数、参数类型、参数类型顺序不同!【 与形参名无关! 】(注意如下代码示例)
    /* 形参列表的不同:与形参名无关! */
    void test(int a, int b);
    void test(int b, int a);	/* 错误:不构成重载! */
    
    /* 形参列表:参数个数不同构成重载 */
    void test(int, int, int);	/* 正确! */
    
    /* 形参列表:个数相同,类型不同:构成重载 */
    void test(int, float);		/* 正确! */
    
    /* 形参列表:个数相同,类型顺序不同:构成重载 */
    void test(float, int);
    
    /* 返回值类型不同,不构成重载! */
    int test(int, int);			/* 错误! */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4. C++支持函数重载的原理

    此处仅作简单的分析!
    代码源文件运行起来需要经历以下几个阶段:

    • 预处理、编译、汇编、链接

    函数重载这种问题是在链接时会有体现,当函数被调用时,编译器会去查找对应的函数名并进行调用(编译阶段会被用特定的函数名修饰方式进行修饰(C语言函数没有)!)。
    函数名的修饰方式有很多,一般而言,修饰以后会用修饰名的后几位来体现函数形参列表的参数类型情况!但是 C 语言中没有,C语言中是直接存储原函数函数名作为查询标识!故 C 语言不支持重载。
    【 以下是在 vs 编译器下进行的测试!通过查看反汇编码来查看函数调用时的函数标识 】

    在这里插入图片描述

    5. 补充:编译器内函数重载提示

    在这里插入图片描述


  • 相关阅读:
    【雷达通信】非相干多视处理(CSA)(Matlab代码实现)
    用一个结构去分割二维空间
    华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 RabbitMQ 集群
    归并排序
    【网络层】RIP协议详解(应用层)、慢收敛、OSPF协议(适合大网络)
    编写自动化软件+python
    xshell终端下tmux显示异常,显示多个状态栏
    17.复制字符串 ,包括\0
    问题:先后键入字符串和字符,结果发生冲突
    JVM对象创建与内存分配机制
  • 原文地址:https://blog.csdn.net/weixin_53202576/article/details/130904937
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号