| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 缺省参数&函数重载 -------- CPP -> 正文阅读 |
|
[C++知识库]缺省参数&函数重载 -------- CPP |
CPP相较于C语言增加了很多新的概念,本篇博客将和大家一起学习CPP中函数的缺省参数以及函数重载。 相信跟着本篇博客学习完后你对CPP会有更深一层的理解。 一、缺省参数1.1. 缺省参数的概念缺省参数在CPP中是一个新的概念,那么什么是缺省参数呢?
| 例 |
1.2. 缺省参数的分类● 全缺省参数
● 半缺省参数 (部分缺省参数)
1.3. 有关缺省参数的注意事项ⅰ半缺省参数必须从右往左依次给参数指定缺省值,不能间隔参数给缺省值
若只想让形参b缺省参数形参c不缺省,可以:
ⅱ 缺省参数不能在函数声明和定义中同时出现 ?(?如果函数的声明与定义位置同时出现缺省参数,恰巧两个位置提供的缺省值不同,那编译器就无法确定到底该用哪个缺省值。) ⅲ 调用函数时传部分参数,默认只能从左往右依次传给各个形参,不可跳跃传参
ⅳ 调用半缺省参数的函数时,不能不传参
ⅴ?缺省值必须是常量或者全局变量 (使用全局变量作为缺省值的情况较少) ⅵ?C语言不支持 (编译器不支持) 二、函数重载在自然语言中一个词被赋予了多重含义,就可以认为这个词被重载了。例如奇葩就是一个重载词,需要通过上下文的语境去判断它所表达的意思。 2.1. 函数重载的概念
● 参数个数不同
● 参数类型不同
● 参数类型顺序不同
2.2. CPP支持函数重载的原理 — 名字修饰 (name Mangling)下面我们将在Linux环境下,采用g++对一段包含重载函数的代码进行编译。 ?经过g++编译后,int Func(int a,int b) 变成了 _Z4Funcii,double Func(double a,double b) 变成了 _Z4Funcdd。 到这里可以得出一个结论,在Linux环境下,经过g++编译函数名经过修饰后会转变成【_Z+函数名长度+函数名+形参类型首字母】的形式,函数的参数不同,修饰出来的名称就不同。正是因为有这样的函数名修饰规则,CPP中的函数重载才得以实现。 用一句话来概括来概括就是,CPP中函数重载的实现由函数名修饰规则来支撑。 结合上面的汇编代码再回顾刚刚函数重载的概念,思考一下,函数的返回值不同能否构成函数重载呢? 答案是不能构成函数重载! 有的小兄弟可能就会觉得是因为函数名修饰规则中没有把返回值类型加到函数名转变后的形式中,所以导致函数返回值类型不同不能构成函数重载。 首先这种想法是错误的,其次这种想法还是错误的。就算把函数返回值类型加到函数名转变后的形式中,函数返回值的类型不同还是无法构成函数重载。
以上面这段代码为例,两个Func函数的形参都是int类型,当我们在调用Func函数时,无法指定Func函数的返回值类型,传的实参是1和2,两个实参都是int类型,这两个Func函数都能接收我们所传递的参数,此时编译器就无法判断要调用哪个Func函数了。 三、缺省参数与函数重载的结合通过上文的学习,对CPP中缺少参数和函数重载有了一定的了解,思考一下,以下这两个函数构成函数重载吗?
程序执行成功,显然这两个函数是构成函数重载的。 但是在调用类似这种重载函数时,我们需要非常小心,不然稍不留神就会编译报错了。
本次与大家一起学习CPP中函数的缺省参数以及函数重载到这就已经接近尾声了,期待下次与你相遇。 < 你的关注,点赞,评论,收藏都是对我创作最大的鼓励 >? ( 若本篇博客存在错误,望指出,感谢!?)? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:54:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |