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++缺省参数与函数重载,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~ 😘 😘 😘 😘

相关推荐
忧郁的蛋~15 小时前
.NET异步编程中内存泄漏的终极解决方案
开发语言·前端·javascript·.net
2301_7951672015 小时前
玩转Rust高级应用. ToOwned trait 提供的是一种更“泛化”的Clone 的功能,Clone一般是从&T类型变量创造一个新的T类型变量
开发语言·后端·rust
你才是向阳花15 小时前
如何用Python实现飞机大战小游戏
开发语言·python·pygame
合作小小程序员小小店15 小时前
web网页开发,在线%商城,电商,商品购买%系统demo,基于vscode,apache,html,css,jquery,php,mysql数据库
开发语言·前端·数据库·mysql·html·php·电商
草莓熊Lotso15 小时前
C++ 方向 Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析
前端·网络·c++·人工智能·后端·python·功能测试
星释15 小时前
Rust 练习册 :Phone Number与电话号码处理
开发语言·机器学习·rust
one year.15 小时前
Linux:线程同步与互斥
java·开发语言
一 乐16 小时前
旅游|内蒙古景点旅游|基于Springboot+Vue的内蒙古景点旅游管理系统设计与实现(源码+数据库+文档)
开发语言·前端·数据库·vue.js·spring boot·后端·旅游
不爱编程的小九九16 小时前
小九源码-springboot103-踏雪阁民宿订购平台
java·开发语言·spring boot
共享家952716 小时前
LRU 缓存的设计与实现
开发语言·c++