命名空间、C++的输入输出、缺省参数(默认参数)、函数重载

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

命名空间

命名空间的使用

C++的输入输出

缺省参数(默认参数)

全缺省参数

半缺省参数(部分缺省)

半缺省参数必须从右向左依次给出,不能间隔

不允许声明和定义同时给缺省参数

函数重载

函数重载的特点包括:

为什么C++支持函数重载,而C语言不支持函数重载呢?


命名空间

在 C++ 中,命名空间(Namespace)是一种用于组织代码和避免命名冲突的机制。通过命名空间,可以将一系列的标识符(如变量、函数、类等)封装在一个命名空间中,从而在不同的作用域中避免名称冲突。

命名空间的语法形式如下:

namespace namespace_name 
{// 声明或定义一些变量、函数、类等
}

命名空间的使用

namespace E
{int a = 10;int b = 20;int Add(int left, int right){return left + right;}int Sub(int left, int right){return left - right;}
}加命名空间名称及作用域限定符
int main()
{printf("%d\n",E::a);return 0;
}使用using将命名空间中成员引入
using E::b;
int main()
{printf("%d\n", E::a);printf("%d\n", b);return 0;
}使用using namespace 命名空间名称引入
using namespace E;
int main()
{printf("%d\n", E::a);printf("%d\n", b);Sub(10, 20);return 0;
}

using namespace std;

std 这个空间,包含一些输入输出,例如 cout,cin对象

C++的输入输出

在 C++ 中,输入输出通常使用 iostream 库来实现。主要的输入输出对象是 cincout

1.使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。

注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式。

2. 使用C++输入输出更方便,不需增加数据格式控制,比如:整形--%d,字符—%c

using namespace std;
int main()
{char s[10];cin>>s;cout<<s<<endl;cout<<'A'<<endl;cout<<65<<endl;return 0;
}

缺省参数(默认参数)

在 C++ 中,函数的默认参数(也称为缺省参数)允许在函数声明中为参数提供默认值。这意味着在调用函数时,如果没有为相应的参数提供值,则会使用参数的默认值。默认参数在函数声明中指定,而不是在函数定义中。

事例

#include<iostream>
using namespace std;void test(int a=1)
{cout<<a<<endl;
}
int main()
{test();//没有传参时,使用参数的默认值test(0);//传参时,使用指定实参return 0;
}

需要注意的是,对于函数的多个参数,只能在参数列表的末尾提供默认参数,不能在中间部分提供。例如:

// 错误示例:不能在非末尾参数提供默认参数
void example(int a = 1, int b, int c = 3);

正确的写法是将默认参数放在参数列表的末尾:

// 正确示例:将默认参数放在参数列表的末尾
void example(int a, int b, int c = 3);

全缺省参数

每个参数都有默认值

void test(int a=1,int b=2,int c=3)
{cout<<a<<endl;cout<<b<<endl;cout<<c<<endl;
}

半缺省参数(部分缺省)

部分参数有默认值

void test(int a,int b,int c=3)
{cout<<a<<endl;cout<<b<<endl;cout<<c<<endl;
}
半缺省参数必须从右向左依次给出,不能间隔
void test(int a=0,int b,int c=3)//错误的
void test(int a,int b=2,int c=3)//正确的

不允许声明和定义同时给缺省参数
//a.h
void test(int a = 10);
// a.c
void test(int a = 20)
{}

注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值

函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。

比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”

在 Linux 中,函数重载与其他 C++ 编译环境中的函数重载方式相同。函数重载是指在同一个作用域内定义多个具有相同名称但参数列表不同的函数。在调用这些函数时,编译器会根据参数列表的不同来确定调用哪个函数。

事例

using namespace std;
int test(int a,int b)
{return a+b;
}
double test(double a,double b)
{return a+b;
}
long test(long a,long b)
{return a+b;
}
int main()
{cout<<test(1,2);cout<<test(1.0,2.0);cout<<test(1L,2L);return 0;
}

函数重载的特点包括:

1)函数名称相同。
2)参数列表不同(包括参数类型、个数、顺序等)。
3)返回类型可以相同也可以不同,但不能仅仅通过返回类型来进行函数

为什么C++支持函数重载,而C语言不支持函数重载呢?

在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。
test.cpp
预处理 头文件展开/宏替换/去掉注释/条件编译
test.i
编译 检查语法,生成汇编代码(指令级代码)
test.s
汇编 将汇编代码生成二进制机器码
test.o
链接 合并链接,生成可执行程序

实际我们的项目通常是由多个头文件和多个源文件构成,而通过我们C语言阶段学习的编译链接,我们可以知道,【当前a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么怎么办呢?

所以链接阶段就是专门处理这种问题,链接器看到a.o调用Add,但是没有Add的地址,就会到b.o的符号表中找Add的地址,然后链接到一起。那么链接时,面对Add函数,连接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规则。

Linux下gcc的修饰规则简单易懂,下面我们使用了gcc演示了这个修饰后的名字。

通过下面我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度+函数名+类型首字母】。

在linux下,采用gcc编译完成后,函数名字的修饰没有发生改变,采用C++编译器编译后结果
结论:在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中

总结:通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。另外我们也理解了,为什么函数重载要求参数不同!而跟返回值没关系


C++函数支持重载详细介绍

  🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据库原理及应用】期末复习汇总高校期末真题试卷06

试卷 一、选择题 1&#xff0e; ________是长期存储在计算机内的有组织,可共享的数据集合. A.数据库管理系统 B.数据库系统 C.数据库 D.文件组织 1&#xff0e; 有12个实体类型&#xff0c;并且它们之间存在15个不同的二元联系&#xff0c;其中4个是1:1联系类型&#xff0c;5…

如何恢复回收站中被删除的文件?3个恢复策略,实测有用!

“刚刚一不小心把回收站清空了&#xff0c;大家有什么好用的方法可以帮我恢复回收站中删除的文件吗&#xff1f;快帮帮我吧&#xff01;” 在使用电脑的过程中&#xff0c;我们有时可能会不小心将重要的文件或文件夹删除到回收站&#xff0c;并且随后可能进一步从回收站中彻底删…

羊大师分析,为什么羊奶是孩子的理想饮品?

羊大师分析&#xff0c;为什么羊奶是孩子的理想饮品&#xff1f; 羊奶&#xff0c;作为一种传统的营养饮品&#xff0c;近年来逐渐受到家长们的青睐&#xff0c;成为孩子们的理想饮品。那么&#xff0c;羊大师将为大家讲解&#xff0c;为什么羊奶能够赢得如此多的赞誉&#xf…

Redis 源码安装(CentOS 单机)

序言 本文给大家介绍如何在 CentOS 上&#xff0c;通过 Redis 源码单机部署 Redis 服务。 一、部署流程 通过官网下载源码 # 下载源码 wget https://download.redis.io/redis-stable.tar.gz# 解压源码包 tar -xzvf redis-stable.tar.gz在 linux 中执行以下命令&#xff0c;安…

Unity3D DOTween

简单介绍一下 DOTween 插件的使用。 导入插件 先到 Asset Store 获取 DOTween 插件&#xff0c;然后在 Package Manager 的 My Assets 中搜索&#xff0c;下载并导入插件。 导入后&#xff0c;会自动弹出一个窗口&#xff0c;提示需要先对插件进行配置。 点击上图中的按钮&am…

深度解析互联网医疗源码:视频问诊APP开发技术剖析

视频问诊APP作为在线医疗其中的重要一环&#xff0c;正在改变人们就医的方式。今天&#xff0c;我将为大家详解互联网医疗源码&#xff0c;探讨视频问诊APP开发技术&#xff0c;揭示其背后的原理和关键技术。 一、视频问诊APP的基本功能 视频问诊APP作为一种新型的医疗服务平台…

使用 OpenCV 创建视频(74)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV 库来捕获和处理视频输入和相似度测量(73) 下一篇&#xff1a;OpenCV使用 Kinect 和其他兼容 OpenNI 的深度传感器(75) 目标 每当您使用视频源时&#xff0c;您最终可能希望将图像处理结果保…

【Verilog】big_small_cnt

通用大小计数器 timescale 1ns / 1ps // // Company: // Engineer: wengf // Create Date: // Design Name: // Module Name: big_small_cnt // Project Name: // Target Devices: // Tool Versions: // Description: // Dependencies: // Revision: // Revision 0…

“人工智能+”推进新质生产力发展论坛暨工作室实践实训基地授牌仪式圆满结束

4月27日&#xff0c;由江西财经大学现代经济管理学院主办的“人工智能”推进新质生产力发展论坛暨“江财现经管泰迪数智技术”校企工作室实践实训基地授牌仪式在江西财经大学现代经济管理学院共青城校区举行&#xff0c;学院院长王金海&#xff0c;副院长丁美东&#xff0c;副院…

项目解决方案:多台poe摄像机接到3台NVR上,如何进行统一管理

目录 一、概述 二、建设目标及需求 三、设计依据与设计原则 1、先进性与适用性 2、经济性与实用性 3、可靠性与安全性 4、开放性 5、可扩充性 6、追求最优化的系统设备配置 7、提高监管力度与综合管理水平 四、建设方案设计 &#xff08;一&#xff09;系统方案设计…

【牛客】[HNOI2003]激光炸弹

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 注意从&#xff08;1,1&#xff09;开始存即可&#xff0c;所以每次输入x,y之后&#xff0c;要x,y。 因为m的范围最大为…

气膜体育馆内部的采光效果如何?—轻空间

气膜体育馆内部的采光效果如何&#xff1f;这是许多人对这种创新建筑的一个关键关注点。 首先&#xff0c;气膜体育馆的采光性非常好。阳光透过屋顶时以漫射光的方式进入室内&#xff0c;这种透射方式使得室内的光线柔和而均匀。从内部观察&#xff0c;整个屋顶就像一个连续的明…

西安银行效益口碑双降:不良率连增,新董事长梁邦海能否救火?

撰稿|行星 来源|贝多财经 近日&#xff0c;西安银行&#xff08;SH:600928&#xff09;方面终于传来了新任掌门人的音讯。该行在2023年财报中正式宣布&#xff0c;董事会选举梁邦海为董事长&#xff0c;在监管部门核准梁邦海的任职资格后&#xff0c;梁邦海将不再担任该行行长…

ShowMeAI | 这是我们知道的,关于〖Suno 〗和〖AI音乐〗的一切

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; Suno 是一款AI音乐创作工具&#xff0c;可以通过提示词和设置生成一段音乐&#xff0c;而且可以包含歌词和人声 (这非常难得)。在经历了两年探索之后…

Python | Leetcode Python题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; class Solution:def minWindow(self, s: str, t: str) -> str:ans_left, ans_right -1, len(s)left 0cnt_s Counter() # s 子串字母的出现次数cnt_t Counter(t) # t 中字母的出现次数less len(cnt_t) # 有 less 种字母的出现次数…

python入门demo实例-个人信息收集页面

dd 今天是python入门day2&#xff0c;先看一下本案例demo的样子吧~ 资源下载&#xff1a; python案例demo个人信息收集页面实现资源-CSDN文库 实现上述界面需要pythonhtml实现&#xff0c;需通过在Web浏览器的地址栏中输入 http://127.0.0.1:5000/打开界面&#xff0c;127.0.…

云密码机的定义与特点

云密码机&#xff0c;作为云计算环境中保障数据安全的关键设备&#xff0c;其重要性不言而喻。它基于虚拟化技术&#xff0c;通过提供高性能的数据加解密、密钥管理等服务&#xff0c;确保云上数据的安全与隐私。下面&#xff0c;安策科技将从云密码机的定义、特点、应用场景以…

精益生产咨询公司在企业转型中发挥的作用有哪些?

在全球化竞争日益激烈的今天&#xff0c;企业转型已成为许多组织求生存、谋发展的必经之路。而在这条道路上&#xff0c;精益生产咨询公司的作用愈发凸显&#xff0c;它们如同企业转型的得力助手&#xff0c;帮助企业在复杂的商业环境中找到新的增长点&#xff0c;实现更高效、…

CRMEB 多商户 Java版 v1.5正式发布,v1.6更新预告新鲜出炉

CRMEB 多商户 Java版 v1.5正式发布啦&#xff01; 新增卡密商品、云盘商品、小程序外链生成器工具、新增商家主动退款、商品列表批量操作&#xff0c;以及后台UI的全面优化升级等。多商户Java版的用户朋友们&#xff0c;新版本可以安排起来啦&#xff01; 同时&#xff0c;多商…

WingPro for Mac注册激活版:Python开发的强大引擎

对于Python开发者来说&#xff0c;一款好的开发工具能够极大地提高开发效率。而WingPro for Mac正是这样一款强大的引擎&#xff0c;让Python开发变得更加高效和便捷。 WingPro for Mac拥有直观的用户界面和强大的调试器&#xff0c;能够快速定位问题并修复错误。它支持PEP8风格…