C++ 学习 ::【基础篇:05】:C++ 函数重载认识及使用、简单介绍:C++ 支持函数重载的原因

这篇具有很好参考价值的文章主要介绍了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;
}

若此时还要实现其他类型值的加和,我们就需要对 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;
}

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);			/* 错误! */

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

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

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

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

C++ 学习 ::【基础篇:05】:C++ 函数重载认识及使用、简单介绍:C++ 支持函数重载的原因

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

C++ 学习 ::【基础篇:05】:C++ 函数重载认识及使用、简单介绍:C++ 支持函数重载的原因文章来源地址https://www.toymoban.com/news/detail-461421.html


到了这里,关于C++ 学习 ::【基础篇:05】:C++ 函数重载认识及使用、简单介绍:C++ 支持函数重载的原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++基础知识 (命名空间、输入输出、函数的缺省参数、函数重载)

    🌠 例1: #include iostream 标准输入输出 std 是 c++ 标准库的命名空间,将标准库的定义实现都放到这个命名空间中 using namespace std 展开 std 里的内容 cout   c 代表的是 console 控制台的意思, out 有输出的意思 流运算符 流插入 endl 等价于 \\\'n\\\' 在 c++ 中,变量、函数和类的名称存在于

    2024年02月15日
    浏览(29)
  • 【C++入门 三】学习C++缺省参数 | 函数重载 | 引用

    缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。 ①全缺省参数 ②半缺省参数 注意: 1. 半缺省参数必须从右往左依次来给出,不能间隔着给 2. 缺省参数不能在函数声明和定义中

    2024年02月06日
    浏览(32)
  • 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&输出、缺省参数、函数重载

    目录 1. C++ 2. 命名空间 2.1 命名空间的定义 2.2 命名空间的使用 3. C++输入输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C++支持函数重载的原理——名字修饰(name Mingling) 5.3 extern \\\"C\\\" ❀❀❀ 没有坚持的努力,本质上并没有多

    2024年02月15日
    浏览(39)
  • C++模版简单认识与使用

    目录 前言: 1.泛型编程 2.函数模版 3.类模版 为什么要有类模版?使用typedef不行吗? 类模版只能显示实例化: 注意类名与类型的区别: 注意类模版最好不要声明和定义分离: 总结: 1.泛型编程 编写与类型无关的通用代码,是代码复用的一种手段,模版是泛型编程的基础。

    2024年04月17日
    浏览(22)
  • 【C++从练气到飞升】05---运算符重载

     🎈 个人主页 :库库的里昂 ✨ 收录专栏 :C++从练气到飞升 🎉 鸟欲高飞先振翅,人求上进先读书 。 目录 ⛳️推荐 一、运算符重载的引用 二、运算符重载 三、赋值运算符重载 1 .赋值运算符重载格式: 2 .赋值运算符只能重载成类的成员函数不能重载成全局函数: 3 .用户没有

    2024年04月14日
    浏览(31)
  • 【C++】中类的6个默认成员函数 取地址及const成员函数 && 学习运算符重载 && 【实现一个日期类】

    1.1 运算符重载【引入】 C++为了增强代码的可读性引入了 运算符重载 ,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为: operator后面接需要重载的运算符符号。 函数原型:

    2024年02月21日
    浏览(36)
  • 【C++】运算符重载案例 - 字符串类 ⑤ ( 重载 大于 > 运算符 | 重载 小于 < 运算符 | 重载 右移 >> 运算符 - 使用全局函数重载 | 代码示例 )

    使用 成员函数 实现 等于判断 == 运算符重载 : 首先 , 写出函数名 , 函数名规则为 \\\" operate \\\" 后面跟上要重载的运算符 , 要对 String a , b 对象对比操作 , 使用 大于 运算符 , 使用时用法为 a b ; 函数名是 operate ; 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ; 要对

    2024年02月07日
    浏览(35)
  • 【MySQL系列】数据库基础学习_简单认识数据库

    「前言」文章内容大致是数据库基础,以及数据库的基本知识。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 我见青山多妩媚,料青山、见我应如是。 ——辛弃疾《贺新郎》 MySQL实际上是一个网络服务(client/server模式

    2024年02月15日
    浏览(32)
  • 0基础学C#笔记05:基础统计函数的使用

    简单介绍一下基础统计函数的使用 打印结果: 代码如下(示例): 统计英语最高分,最低分,总分,平均分 统计男生及女生各自的平均分 统计英语成绩最高的学员的名字和成绩 打印结果: 我们主要用到了lambda表达式。

    2024年02月16日
    浏览(31)
  • C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)

    C++ operator的使用(重载运算符、仿函数、类型转换操作符) C++11实用技术(一)auto与decltype的使用 C++11实用技术(二)std::function和bind绑定器 C++11实用技术(三)std::future、std::promise、std::packaged_task、async C++11 中,operator 是一个,用于重载运算符。通过重载运算符

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包