c++入门-------命名空间、缺省参数、函数重载
C++系列
文章目录
- C++系列
- 前言
- 一、命名空间
- 二、缺省参数
- 2.1、缺省参数概念
- 2.2、 缺省参数分类
- 2.2.1、全缺省参数
- 2.2.2、半缺省参数
- 2.3、缺省参数的特点
- 三、函数重载
- 3.1、函数重载概念
- 3.2、构成函数重载的条件
- 3.2.1、参数类型不同
- 3.2.2、参数个数不同
- 3.2.3、参数类型顺序不同
前言
在学习C++之前,首先我们要知道—C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。这篇文章可以帮助我们了解c++是如何:
- 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。
- 为后续类和对象学习打基础。
一、命名空间
随着c语言的不断发展和完善,C语言库函数和关键字的定义,越来越多,这些变量、函数和类的名称将都存在于全局作用域中,而在我们编写程序时定义的函数、变量有时就会和库中所定义的发生冲突,如:
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{printf("%d\n", rand);return 0;
}

注:这里的报错就是因为在库中有一个rand()函数,与我们定义的rand变量名字冲突了。
C语言没有办法很好的解决这类问题,c++便提供了命名空间的方法,命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
命名空间定义:
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员,如:
namespace ltn
{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}
}
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
现在命名冲突的问题我们解决了,但是当你尝试对类中的函数进行调用时又会出现问题,如:
namespace ltn
{int rand = 10;int Add(int left, int right){return left+right;}
}
int main()
{Add(1, 1);return 0;
}

这是因为对于这个命名空间中所定义函数、变量等,我们是不可以直接访问的,需要配合“::”域作用符,指定域来进行访问,如:
namespace ltn
{int rand = 10;int Add(int left, int right){return left+right;}
}
int main()
{printf("%d\n", ltn::rand);ltn::Add(1, 1);return 0;
}
如果我们不指定域,编译器首先会去局部查找,其次会去全局域查找,并不会去我们所定义的命名空间中查找,这一点会在后面验证。
在我们编写c++代码时,往往会在代码中,编写这样一段代码“using namespace std;”这里的std就是我们标准库所在的域,而这句代码的意思就是,将这个命名空间展开(权限放开),使我们在使用库中定义的函数、关键字时,不在受域限制,我们可以通过自己定义的命名空间来验证这里的问题,如:

在不指定命名空间时程序是无法编译的,接下来我们展开ltn这个命名空间:

#include <stdio.h>
#include <stdlib.h>
namespace ltn
{int rand = 0;int Add(int left, int right){return left + right;}
}
int main()
{Add(1, 1);return 0;
}
对上面个这中情况,我们如果展开命名空间,rand变量就会和库中的rand()函数冲突,如果不展开每次都要指定域访问,又有点麻烦,这时我们就可以将
命名空间中我们经常使用的函数、变量具体引,如:

还以一点,当我们在两个不同的文件中,定义了相同的命名空间他们是会自动合并的,例:
namespace ltn
{int add(int x,int y){printf("add\n");return 0;}
}

在test.h文件中定义一个和test.c相同的命名空间,这是我们只需要将test.c中的命名空间展开test.h命名空间中的add函数一样可以使用。

二、缺省参数
2.1、缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。
void Func(int a = 0)
{cout<<a<<endl;
}
int main()
{Func(); // 没有传参时,使用参数的默认值Func(10); // 传参时,使用指定的实参
return 0;
}

2.2、 缺省参数分类
2.2.1、全缺省参数
void Func(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}
int main()
{Func();cout <<"-----------------" << endl;Func(1);cout << "-----------------" << endl;Func(1,2);cout << "-----------------" << endl;Func(1,2,3);return 0;
}

但我们使用全缺省时,我们可以选择性给函数传递数据。
2.2.2、半缺省参数
void Func(int a, int b = 10, int c = 20)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}
int main()
{Func(1);cout << "-----------------" << endl;Func(1,2);cout << "-----------------" << endl;Func(1,2,3);return 0;
}
半缺省函数需要注意的是:
- 半缺省参数必须从右往左依次缺省,不能间隔着给
- 半缺省参数在调用是,我们传递的参数是从左到右依次匹配的
2.3、缺省参数的特点
1、缺省参数不能在函数声明和定义中同时出现:



语法规定,当我们对函数进项声明和定义分离时,缺省参数不可同时存在,如果同时存在,而两个位置提供的值不同,那编译器就无法确定到底该用哪个缺省值。
2、 缺省值必须是常量或者全局变量
这个大家自己验证吧。
三、函数重载
3.1、函数重载概念
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题
3.2、构成函数重载的条件
构成重载的函数在调用时编译器会根据我们传递的参数,匹配调用合适的函数。
3.2.1、参数类型不同
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;
}
int main()
{Add(1,1);Add(1.1, 1.2);return 0;
}

程序执行时,编译器自动匹配合适的函数进行调用。
3.2.2、参数个数不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}
int main()
{f();f(1);return 0;
}

这里要注意的是,我们上面提到的缺省参数如果像下面这样使用,会造成二义性的问题:

3.2.3、参数类型顺序不同
需要注意的是,这里说的参数类型顺序不同指的是不同类型的参数。
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;
}
int main()
{f(10, 'a');f('a', 10);return 0;
}
至于c++是如何支持函数重载的,大家感兴趣可以搜一下c++中函数名命名规则。
相关文章:
c++入门-------命名空间、缺省参数、函数重载
C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…...
豆包、扣子等产品如何与CSDN合作?
要实现CSDN开发者社区与豆包、扣子等产品的深度合作,构建创作者Agent生态体系,可通过以下结构化方案实现技术、生态与商业价值的闭环(含具体实施路径与数据指标): 一、战略合作框架搭建 开放平台互通 建立三方API网关&…...
51单片机测试题AI作答测试(DeepSeek Kimi)
单片机测试题 DeepSeek Kimi 单项选择题 (10道) 6题8题判断有误 6题判断有误 智谱清言6题靠谱,但仔细斟酌,题目出的貌似有问题,详见 下方。 填空题 (9道) 脉宽调制(Pulse …...
Java实际上只有值传递
在 Java 中,实际上只有值传递,这可以从基本数据类型和引用数据类型两个方面来看。 基本概念 值传递:指在方法调用时,将实际参数的值复制一份传递给形式参数,在方法内部对形式参数的修改不会影响到实际参数。引用传递…...
解析HTML时需要注意什么?
在使用PHP爬虫解析HTML内容时,需要注意以下几个关键点,以确保数据提取的准确性和程序的稳定性。以下是一些重要的注意事项和最佳实践: 1. 选择合适的解析工具 PHP提供了多种工具来解析HTML,但选择合适的工具可以简化开发过程并提…...
去耦电容的作用详解
在霍尔元件的实际应用过程中,经常会用到去耦电容。去耦电容是电路中装设在元件的电源端的电容,其作用详解如下: 一、基本概念 去耦电容,也称退耦电容,是把输出信号的干扰作为滤除对象。它通常安装在集成电路…...
2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(二)
2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(二) 第一部分:网络平台搭建与设备安全防护任务书第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1:应急响应&…...
深入剖析:基于红黑树实现自定义 map 和 set 容器
🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 在 C 标准模板库(STL)的大家庭里,map和set可是超级重要的关联容器成员呢😎&#x…...
20-R 绘图 - 饼图
R 绘图 - 饼图 R 语言提供来大量的库来实现绘图功能。 饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系。 R 语言使用 pie() 函数来实现饼图,语法格式如下: pie(x, l…...
第438场周赛:判断操作后字符串中的数字是否相等、提取至多 K 个元素的最大总和、判断操作后字符串中的数字是否相等 Ⅱ、正方形上的点之间的最大距离
Q1、判断操作后字符串中的数字是否相等 1、题目描述 给你一个由数字组成的字符串 s 。重复执行以下操作,直到字符串恰好包含 两个 数字: 从第一个数字开始,对于 s 中的每一对连续数字,计算这两个数字的和 模 10。用计算得到的新…...
STM32F4 adc扫描模式采集实验
做adc采集的时候用扫描模式发现读数据时只能读到一个通道的数据,想显示其他几个通道的数据只能进行多次单个扫描,违背了扫描模式的本意,故用ai做了一个将扫描数据用dma储存在内存的adc三通道采集实验,若有巨佬发现有错望告知。 代…...
软考教材重点内容 信息安全工程师 第17章 网络安全应急响应技术原理与应用
17.1 网络安全应急响应概述 网络安全应急响应是针对潜在发生的网络安全事件而采取的网络安全措施。 17.1.1 网络安全应急响应概念 网络安全应急响应是指为应对网络安全事件,相关人员或组织机构对网络安全事件进行监测、预警、分析、响应和恢复等工作。 17.2.3 网络安…...
点击修改按钮图片显示有问题
问题可能出在表单数据的初始化上。在 ave-form.vue 中,我们需要处理一下从后端返回的图片数据,因为它们可能是 JSON 字符串格式。 vue:src/views/tools/fake-strategy/components/ave-form.vue// ... existing code ...Watch(value)watchValue(v: any) …...
Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8 引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应用程序、网络应用、命令行工具等。…...
大模型在术后认知功能障碍预测及临床方案制定中的应用研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 研究创新点 二、术后认知功能障碍概述 2.1 定义与表现 2.2 危害与影响 2.3 发病机制与相关因素 三、大模型技术原理与应用现状 3.1 大模型技术原理 3.2 大模型在医疗领域的应用 四、基于大模型的术后认知…...
用DeepSeek来帮助学习three.js加载3D太极模形
画一个平面的太极图是很容易,要实现3D的应该会很难 一、参考3D模形效果 看某网页看到一个效果,像一个3D太极球,觉得挺有趣,挺解压的,想进一步去了解下这是如何实现 效果: 链接地址: http://www.…...
【JavaEE进阶】Spring Boot配置文件
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 SpringBoot配置⽂件 举例: 通过配置文件修改端口号 配置⽂件的格式 properties基本语法 读取配置⽂件 properties配置文件的缺点 yml配置⽂件 yml基本语法 yml和proper…...
学习通用多层次市场非理性因素以提升股票收益预测
“Learning Universal Multi-level Market Irrationality Factors to Improve Stock Return Forecasting” 论文地址:https://arxiv.org/pdf/2502.04737 Github地址:https://github.com/lIcIIl/UMI 摘要 深度学习技术与量化交易相结合,在股…...
【Godot4.3】基于绘图函数的矢量蒙版效果与UV换算
概述 在设计圆角容器时突发奇想: 将圆角矩形的每个顶点坐标除以对应圆角矩形所在Rect2的size,就得到了顶点对应的UV坐标。然后使用draw_colored_polygon,便可以做到用图片填充圆角矩形的效果。而且这种计算的效果就是图片随着其填充的图像缩…...
记一些工具(持续更新)
wireshark——网络抓包工具 mitmproxy ——利用中间人攻击进行https抓包的工具(需配合安装由此代理自己签发的根证书到客户机系统) Cloudflare—— 一个网站中间层,通过基于反向代理的内容分发网络(CDN),Cloudflare提供包括CDN、优化工具、安全、分析以…...
DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!
项目地址:GitHub - deepseek-ai/FlashMLA 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天! 一、开源周震撼启幕 继上周预告后,DeepSeek于北京时间今晨9点准时开源「FlashMLA」,打响开源周五连…...
PCL 点云添加高斯噪声
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在点云模型中将所有的点沿其法向量方向随机偏移一定距离,以此来得到点云实体的噪声点,偏移的幅度与点云尺度有关,偏移距离服从高斯分布,以此来获得高斯分布的噪声数据。 二、实现代码 // 标准文件 #include &l…...
通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形
论文标题 英文标题:Improving TSN Traffic Shaping with Constant Bandwidth Server Scheduling 中文标题:通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形 作者信息 作者:Benjamin van Seggelen 指导教师&am…...
软件测试高频面试题
以下是一些软件测试高频面试题: 基础概念类 HTTP和HTTPS的区别:HTTPS使用SSL/TLS协议对传输数据加密,HTTP没有加密;HTTPS可确保数据完整性,防止传输中被篡改,HTTP不保证;HTTP默认用80端口&…...
英语学习DAY5
内心旁白 关于我为什么从2月5号开的这个篇章现在才第五天这件事? 咳咳咳,容许我狡辩一下,我是有事去忙了,我真的很想每日学习英语(信我兄弟们)! 虽然英语学习对我来说真的很难,你…...
如何查看图片的原始格式
问题描述:请求接口的时候,图片base64接口报错,使用图片url请求正常 排查发现是图片格式的问题: 扩展名可能被篡改:如果文件损坏或扩展名被手动修改,实际格式可能与显示的不同,需用专业工具验证…...
Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来
Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来 在深度学习的优化中,自然梯度下降(Natural Gradient Descent)是一个强大的工具,它利用Fisher信息矩阵(FIM)调整梯度…...
赛前启航 | 三场重磅直播集结,予力微软 AI 开发者挑战赛!
随着微软 AI 开发者挑战赛的火热进行,赛前指导直播已成为众多参赛者获取技术干货、灵感碰撞和实战技巧的绝佳平台。继前两期的精彩呈现,第三、四、五期直播即将接连登场,为开发者们带来更加深入的 AI 技术剖析和项目实战指引。无论你是想进一…...
VMware安装Centos 9虚拟机+设置共享文件夹+远程登录
一、安装背景 工作需要安装一台CentOS-Stream-9的机器环境,所以一开始的安装准备工作有: vmware版本:VMware Workstation 16 镜像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …...
【HarmonyOS Next】地图使用详解(一)
背景 这系列文章主要讲解鸿蒙地图的使用,当前可以免费使用,并提供了丰富的SDK给开发者去自定义控件开发。目前可以实现个性化显示地图、位置搜索和路径规划等功能,轻松完成地图构建工作。需要注意的是,现在测试只能使用实体手机去…...
