C++的缺省参数、函数重载和引用

devtools/2024/12/22 14:48:19/

缺省参数

缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参 则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把 缺省参数也叫默认参数),要注意的是C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。

全缺省

#include<iostream>
namespace HJY
{int ADD(int a = 1, int b = 1){return a + b;}
}int main()
{std::cout << HJY::ADD() << std::endl;int a = 0, b = 0;std::cin >> a >> b;std::cout << HJY::ADD(a, b) << std::endl;return 0;
}

半缺省

#include<iostream>
namespace HJY
{int ADD(int a, int b = 1){return a + b;}
}int main()
{int n = 0;std::cin >> n;std::cout << HJY::ADD(n) << std::endl;int a = 0, b = 0;std::cin >> a >> b;std::cout << HJY::ADD(a, b) << std::endl;return 0;
}

函数重载

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同,但不能是形参相同,函数类型不同。而C语⾔是不⽀持同⼀作⽤域中出现同名函数的。

1.参数个数不同

#include<iostream>void func()
{std::cout << "void func()" << std::endl;
}void func(int a)
{std::cout << "void func(int a)" << std::endl;
}int main()
{func();func(1);return 0;
}

2.参数类型不同

#include<iostream>void Swap(int a, int b)
{std::cout << "void Swap(int a, int b)" << std::endl;
}void Swap(double a, double b)
{std::cout << "void Swap(double a, double b)" << std::endl;
}int main()
{Swap(1, 1);Swap(1.2, 1.6);return 0;
}

还有一个要注意的点是,函数重载时一定要注意缺省参数的使用,会导致程序报错。

引用

引用是C++中一种特殊的用法。与指针不同,引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,它和它引⽤的变量共⽤同⼀块内存空间。

#include<iostream>int main()
{int a = 0;std::cin >> a;//引用int& b = a;std::cout << "a=" << &a << ' ' << "b=" << &b << std::endl;std::cout << "a=" << a << ' ' << "b=" << b << std::endl;b++;std::cout << "a=" << a << ' ' << "b=" << b << std::endl;a++;std::cout << "a=" << a << ' ' << "b=" << b << std::endl;return 0;
}

而且一个变量可以多次引用

还有一个要注意的点

引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷贝提⾼效率和改变引⽤对象时同时改变被 引⽤对象。引⽤传参跟指针传参功能是类似的,但引⽤传参相对更⽅便⼀些。

据最简单的例子:

#include<iostream>
void Swap(int& a, int& b)
{int tmp = a;a = b;b = tmp;
}
int main()
{int a = 0, b = 0;std::cin >> a >> b;Swap(a, b);std::cout << "a=" << a << ' ' << "b=" << b << std::endl;return 0;
}

实现交换一般要用指针传参,学了引用之后,实现这个会更方便一些。引用有引用的有点,但引用不会代替指针,两者各有自己的特点。两者相辅相成。


http://www.ppmy.cn/devtools/59288.html

相关文章

Anthropic发布新工具改进大语言模型;商汤科技发布全球首个支持泰文的AI大模型

&#x1f989; AI新闻 &#x1f680; Anthropic发布新工具改进大语言模型 摘要&#xff1a;Anthropic 公司推出多项基于 Claude 3.5 Sonnet 大语言模型的新工具&#xff0c;提升提示词生成和测试能力。新增的“评估”单元帮助开发者自动化生成和微调提示&#xff0c;改进任务…

tableau标靶图,甘特图与瀑布图绘制 - 9

标靶图&#xff0c;甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…

vue3+antd+g2plot快速入门

创建项目 pnpm create vite选择vue和JavaScript 安装依赖 pnpm i ant-design-vue pnpm i antv/g2plot pnpm i vue-router完整代码 package.json {"name": "frontend","private": true,"version": "0.0.0","type&q…

应急响应总结

应急响应 日志 windows IIS 6.0 及更早版本&#xff1a; C:\WINDOWS\system32\LogFiles\W3SVC[SiteID]\ IIS 7.0 及更高版本&#xff1a; C:\inetpub\logs\LogFiles\W3SVC[SiteID]\ Apache HTTP Server C:\Program Files (x86)\Apache Group\Apache2\logs\ 或者 C:\Prog…

基于深度学习的语言生成

基于深度学习的语言生成&#xff08;NLG, Natural Language Generation&#xff09;是一种利用深度学习模型生成自然语言文本的技术。它在智能写作、自动摘要、对话系统、机器翻译等领域有广泛应用。以下是对这一领域的系统介绍&#xff1a; 1. 任务和目标 语言生成的主要任务…

GESP C++ 三级真题(2024年3月)T2 完全平方数

试题名称&#xff1a;完全平方数 题目描述&#xff1a;小杨同学有一个包含 个非负整数的序列 &#xff0c;他想要知道其中有多少对下标组合 ( )&#xff0c;使得 是完全平方数。 如果 是完全平方数&#xff0c;则存在非负整数 使得 。 3.2.2 输入格式 第一行一个非负整数 &…

如何从 PDF 中删除背景

您是否曾经收到过充满分散注意力背景的扫描 PDF 文档&#xff1f;也许是带有繁忙水印的旧收据或背景光线不均匀的扫描文档。虽然这些背景可能看起来没什么大不了的&#xff0c;但它们会使您的工作空间变得混乱&#xff0c;并使您难以专注于重要信息。轻松删除这些不需要的元素并…

Python调用摄像头

以下是一个使用 Python 调用摄像头的简单示例代码&#xff0c;需要使用 opencv-python 库&#xff1a; python 复制 import cv2 # 创建一个 VideoCapture 对象来捕获摄像头的视频 cap cv2.VideoCapture(0) # 0 表示默认的摄像头 while True: # 读取一帧视频 ret…