c++缺省参数与函数重载(超详细)

文章目录


前言

在本文章中,我们将要详细介绍一下C++c++缺省参数与函数重载的内容,具体包括定义,使用以及等缺省参数的概念,使用,分类,注意事项和函数重载中的一系列知识以及二者结合会产生什么样的效果相关的知识等。

一、缺省参数

1.缺省参数的概念与使用

🌟🌟缺省参数是声明或定义是为函数参数指定的一个缺省值。在调用该函数时,如果没有指定实参,则采用这个缺省值作为函数参数。否则使用指定形参。

在调用fun函数时,没有传参,则采用给形参赋的那个缺省值。

2.缺省参数的分类

🌝 🌝 .全缺省

函数的形参全部给缺省值。

🌝 🌝 .半缺省

函数的形参只有一部分给缺省值。

3.缺省参数注意事项

🎁🎁1.半缺省参数必须从右往左依次赋值,不能连续给。

🎁🎁2.声明和定义不能同时给缺省值,会产生调用歧义

我们一般建议声明给缺省值,定义正常写。

🎁🎁3.缺省值必须是全局变量或者常量

🎁🎁4.c语言不支持

二、函数重载

1.什莫事函数重载

函数重载:在同一作用域下,实现几个功能相似的同名函数。

2.函数重载的几种形式

🐯🐯参数类型不同

cpp 复制代码
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}

🐯🐯参数数量不同

cpp 复制代码
void f()
{
	cout << "f()" << endl;
}
void f(int a)
{
	cout << "f(int a)" << endl;
}

🐯🐯参数顺序不同

cpp 复制代码
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}

仅仅对参数有要求,对返回值无要求

为什莫呢??

💓💓调用函数时,返回值并不重要,考虑的是函数名称和参数,返回值是调用处理数据之后考虑的事情

3.函数重载与缺省值的结合

函数重载与缺省值的结合是否可行呢??

这样四可以的,传参调用第一个f函数,虽然有缺省值,但是进行了传参,缺省值不进行使用。

看一下这段代码》》

这个进行了报错,在传参时我们发现调用第一个第二个都是合理的,这样两个就发生了冲突

函数重载与缺省值结合,不传参数调用有二义性

4.为什么c++支持函数重载??

🌟🌟项目一般都是由多个头文件和源文件构成。

比如a.cpp在调用b.cpp中的Add函数,编译后生成a.obj的目标文件,但是没有Add函数的地址。

因为Add函数是在b.cpp中定义的。函数地址在b.obj中。

🌟🌟编译器在链接时,看到a.obj在调用Add,但是没有Add函数的地址,就回到b.obj的符号表中去找Add的地址,然后连接到一起。

🌟🌟那么链接时,面对Add函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的

函数名修饰规则

🌟🌟在Linux中g++采用(_Z+函数长度+函数名+类型首字母),window中也有自己独特的函数名修饰规则。只要参数不同,所形成的名字就会不同,这样就完成重载。

🌟🌟但是c语言采用本来的函数名取进行寻找,不加任何修饰,同名函数没办法区分,不支持重载

总结

以上就是今天要讲的内容,本文仅仅详细介绍了C++c++缺省参数与函数重载,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~ 😘 😘 😘 😘

相关推荐
bzmK1DTbd8 小时前
Git版本控制:Java项目中的分支管理与合并策略
java·开发语言·git
许长安8 小时前
RPC 同步调用基本使用方法:基于官方 RouteGuide 示例
c++·经验分享·笔记·rpc
Rust研习社8 小时前
为什么 Rust 没有空指针?
开发语言·后端·rust
kyriewen118 小时前
WebAssembly:前端界的“外挂”,让C++代码在浏览器里跑起来
开发语言·前端·javascript·c++·单元测试·ecmascript
其实防守也摸鱼10 小时前
CTF密码学综合教学指南--第九章
开发语言·网络·python·安全·网络安全·密码学·ctf
砚底藏山河10 小时前
Python量化开发:2026最佳实时股票数据API接口推荐与对比
开发语言·windows·python
AlunYegeer11 小时前
JAVA,以后端的视角理解前端。在全栈的路上迈出第一步。
java·开发语言·前端
浅念-11 小时前
刷穿LeetCode:BFS 解决 Flood Fill 算法
数据结构·c++·算法·leetcode·职场和发展·bfs·宽度优先
hixiong12311 小时前
C# OpenvinoSharp使用DINOv2模型进行图像相似度计算
开发语言·c#
DFT计算杂谈12 小时前
自动化脚本一键绘制三元化合物相图
java·运维·服务器·开发语言·前端·python·自动化