【C++入门】命名空间,输出输入,缺省参数,函数重载

news2024/10/6 2:19:58

文章目录

  • 命名空间
  • C++输入与输出
  • 缺省参数
  • 函数重载

命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标 识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

#include<stdio.h>
#include<stdlib.h>

int rand = 0;
int main()
{
	printf("%d\n",rand);
	return 0;
}

这也证明了C语言并不能避免重定义这类问题,所以接下来我们要解决的事情就是重命名问题。
这里是引用

解决重命名问题有三种方法

  • 1.指定命名空间访问
  • 2.常用部分展开
  • 3.全局展来(并不常用)

指定命名空间访问
这类方法会在以后的实际开发的项目工程种经常使用,但是并不方便日常练习。

#include<stdio.h>
#include<stdlib.h>
#include"zzm1.h"

int a = 0;
int main()
{
	int a = 5;
	printf("%d\n",a);//5
	printf("%d\n",::a);//0
	printf("%d\n",Azzm::a);//10
	return 0;
}
//头文件zzm1.h
namespace Azzm
{
	int a = 10;
}
  • 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间是可以嵌套的,当两个命名空间的名称是一样的编译器会认为将两个命名空间合并成为一个。

  • 命名空间中可以定义变量/函数/类型

  • 从上面的代码中可以看出,查找a的信息是从函数内开始找的,没有找到再去全局中查找。::(作用域限定符)就是指定空间查找的,当::的前面没有东西,或者为空格时,意思就是指定的空间为全局,在::的前面加上Azzm就是去该名字的命名空间去查找。

-------------------------------------------------------------------------------------------------------------

常用部分展开
该方法在以后的实际开发项目当中也会经常的使用,但是并不适合平时的练习。

#include<iostream>
//using namespace std;
using std::cout;
using std::endl;

int main()
{
	int a = 0;
	cout<<a<<endl;
	cout << "hello world" << endl;
	cout << 'c' << endl;
	return 0;
}

部分展开可见上面的代码已经方便多了,

-----------------------------------------------------------------------------------------------------------

全局展开
该方法经常使用于平时的练习,非常的便利,但是并不适合实际开发当中的项目。

#include<iostream>
using namespace std;
//using std::cout;
//using std::endl;

int main()
{
	int a = 0;
	cout<<a<<endl;
	cout << "hello world" << endl;
	cout << 'c' << endl;
	return 0;
}

全局的展开,同样也带来了命名与函数名的冲突问题,有利也有弊。
一般情况下是不建议全局展开的。

C++输入与输出

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。
  5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有一个章节更深入的学习IO流用法及原理。
    注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用+std的方式。
#include<iostream>
using namespace std;
int main()
{
	int n=0;
	cin >> n;
	double arr[5];
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}
	for (int i = 0; i < n; i++)
	{
		cout << arr[i] << endl;//endl='\n'
	}
	return 0;
}

使用coutcin的好处是它可以自动识别类型,方便了很多。当需要控制浮点数精度的时候,可以继续使用printf和scanf,相对于这两个控制精度更加的简便(c++是兼容c的)。所以在我们使用时,那种更方便就是用那种,都是取决于自己。

缺省参数

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

void Func(int a = 0)//默认值a=0
{
 	 cout<<a<<endl;
}
int main()
{
	 Func();     // 没有传参时,使用参数的默认值
	 Func(10);   // 传参时,使用指定的实参
	 return 0;
}

缺省参数分类

  • 全缺省参数
void Func(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
  • 半缺省参数
void Func(int a, int b = 10, int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现(在声明当中出现)
//test.cpp
#include"test.h"
int main()
{
	Func(1);
	return 0;
}
//test.h
#include<iostream>
using std::cout;
using std::endl;

void Func(int a = 10, int b = 20, int c = 30);//注意
//zzm.cpp
#include"test.h"

void Func(int a , int b, int c )//注意
{
	cout << "a = " << a << endl;//1
	cout << "b = " << b << endl;//20
	cout << "c = " << c << endl;//30
}
  1. 缺省值必须是常量或者全局变量
  2. C语言不支持(编译器不支持)

函数重载

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这
些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
形成函数重载有三种不同的条件,符合其一就可以实现函数重载。

  • 参数类型不同
  • 参数个数不同
  • 参数顺序不同

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;
}

2.参数个数不同

void f()
{
	cout << "f()" << endl;
}
void f(int a)
{
 cout << "f(int a)" << endl;
}

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;
}

在这里简单介绍一下c和c++分别的识别函数的方法,c是直接就通过函数名来识别,所以c也就不能出现相同的函数名在统一作用域。而c++是通过函数名和参数来识别函数的,所以也就可以实现相同的函数名,返回类型并不能作为识别函数的方法。

最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出

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

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

相关文章

电子技术——共源共栅放大器

电子技术——共源共栅放大器 之前我们提到过&#xff0c;提高基础增益单元&#xff08;共源放大器&#xff09;的一种方法是提高其 ror_oro​ 的阻值&#xff0c;之后我们学过共栅放大器作为电流缓冲器可以做到这一点&#xff0c;自然地我们就得到了终极解决方案&#xff0c;也…

Fluid-数据缓存亲和性调度原理解析

前言在Fluid中&#xff0c;Dataset资源对象中所定义的远程文件是可被调度的&#xff0c;这意味着你能够像管理你的Pod一样管理远程文件缓存在Kubernetes集群上的存放位置。另外&#xff0c;Fluid同样支持对于应用的数据缓存亲和性调度&#xff0c;这种调度方式将应用(e.g. 数据…

iOS 导航条isTranslucent几个注意点(iOS11及iOS13的变化)

文章主要针对11及13之后的导航变化进行总结&#xff0c;主要是设置透明度时对转场&#xff0c;包括标题&#xff0c;背景透明&#xff0c;图片&#xff0c;颜色等设置的影响。 每一个iOS版本的发布苹果最不稳写的可能就数这个导航条了吧&#xff0c;改了又改。 因此isTranslu…

Prometheus监控Java-JMX

一、什么是 JMX Exporter ? JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据&#xff0c;然后将其转换为 Prometheus 所认知的 metrics 格式&#xff0c;以便让 Prometheus 对其进行监控采集。 那么&#xff0c;JMX 又是什么呢&#xff1f;它的全称是&a…

【Redis场景4】单机环境下秒杀问题

单机环境下的秒杀问题 秒杀下单功能及并发测试 完整代码GitHub&#xff1a;https://github.com/xbhog/hm-dianping/tree/20230130-xbhog-redisSpike 秒杀条件分析&#xff1a; 秒杀是否开始或结束&#xff0c;如果尚未开始或已经结束则无法下单库存是否充足&#xff0c;不足…

【体验测评】ChatGDP

前言 今天在去打针之前测试了下比较火的ChatGPT,总得来说还是比较好用的&#xff0c;尤其是跟浏览器搭配可以当摘要看&#xff0c;然后再进行细化查阅。 ​针对可以写论文跟交作业&#xff0c;我觉得查重率这一关比较麻烦&#xff0c;不现实&#xff0c;尤其是参与人增多的时…

php宝塔搭建部署实战易优养殖基地网站源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的易优养殖基地网站源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xff0c;宝…

选择游戏开发工具的原则

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。昨天为了给我的精致1010游戏方便的增加更多关卡&#xff0c;我用 Unity 做了个关卡编辑器&a…

pycharm的terminal与Project interpreter 配置环境不一致的问题

考虑自己的项目名中是否出现了中文&#xff0c;我是因为这个原因导致Terminal 前面出现了PS&#xff0c;用第2条解决切换终端环境后还是安装包不一致。终端出现PS&#xff0c;考虑在settings中搜索找到Terminal&#xff0c;修改其Shell path为cmd.exe&#xff0c;关闭重新打开T…

SpringCloud保姆级搭建教程三---Feign

1、第一点就是要明白服务与服务之间在怎么样的情况下&#xff0c;如何使用feign答&#xff1a;服务A要调用服务B的某个controller方法的时候&#xff0c;服务A就需要使用feign ,和服务B是没关系的所以&#xff0c;首先&#xff0c;在服务A中添加feign的依赖&#xff0c;我这里就…

nodejs基于vue高校图书馆座位预约系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 使用工具简介 4 2.2 环境配置 4 2.3 B/S结构简介 4 2.4 MySQL数据库 5 2.5 框架介绍 5 3 系统分析 63.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行…

软件测试电商项目实战(写进简历没问题)

前言 说实话&#xff0c;在找项目的过程中&#xff0c;我下载过&#xff08;甚至付费下载过&#xff09;N多个项目、联系过很多项目的作者&#xff0c;但是绝大部分项目&#xff0c;在我看来&#xff0c;并不适合你拿来练习&#xff0c;它们或多或少都存在着“问题”&#xff…

【i2c协议介绍】

文章目录协议简单介绍五种速度模式master/slave和transmitter/receiver关系第一种情况&#xff1a;master作为transmitter&#xff0c;slave作为receiver第二种情况&#xff1a;当master作为receiver&#xff0c;slave作为transmitteri2c基本信号start产生stop信号数据传输有效…

OpenAI ChatGPT 注册使用全攻略,以及常见问题解决办法

前言 这个时代&#xff0c;利用好 AI 完成自己的工作&#xff0c;放大自己的效率&#xff0c;已是一种必不可少的技能。 文章目录前言一、注册和登录二、常见问题和解决办法三、参考链接一、注册和登录 1&#xff09;注册网址&#xff1a;https://chat.openai.com/auth/login …

8.数据库编程

梳理 名词解释 简答题 1.游标的使用步骤 ① 声明游标。 用DECLARE语句为一条SELECT语句定义游标 EXEC SQL DECLARE<游标名> CURSOR FOR <SELECT语句>;使用T-SQL语句生成一个结果集&#xff0c;并且定义游标的特征&#xff0c;如游标中的记录是否可以修改。 定…

《趣学算法》读书笔记

内容摘要 主要介绍我对本书的一些自我感觉比较亮点地方的总结。 第一章 算法 算法有两条线索&#xff0c;数据结构、算法策略。 算法特性 时间复杂度 常见算法时间复杂度 时间复杂度的渐进上界 渐进精确界 用渐进上界和渐进下界逼近&#xff0c; 空间复杂度 递归 递归包…

浅谈监控易运维系统在金融信创国产化中的使用

自2019年&#xff0c;国家明确信创产业将成为拉动经济发展的重要途径和崭新动能以来&#xff0c;全行业进入一个高速发展新阶段。此前倡导的“28”安全可控体系&#xff0c;其中在8大基础行业中,金融行业信创产品推广成为重中之重。金融行业信创&#xff0c;是为解决行业本质安…

ENVE5.3安装与汉化(一次性安装成功附安装包)

目录 1.安装包下载 2. 软件安装 3. ENVI5安装目录说明 1.安装包下载 链接&#xff1a;https://pan.baidu.com/s/1dp2ucQa3DMHLYpw239-_vA?pwd6944 提取码&#xff1a;6944 2. 软件安装 安装前注意事项&#xff1a; 安装全程断网&#xff1b;下载、解压和安装都应该在英文…

【电商】订单信息与状态流转

前言订单产生后&#xff0c;接下来会继续进行一系列流转&#xff0c;最后送到用户手里。在每个环节都有对应的操作&#xff0c;数据信息也要求其完成性&#xff0c;可以根据订单的每个状态变化&#xff0c;来计算分析&#xff0c;进而进行优化供应链路径&#xff0c;以提升订单…

三勾商城JAVA多商户配置发布

admin、shop、supplier端测试&#xff1a; 账号/密码均为admin/123456 后端vue目录 1、jjj_shop_multi_admin> 对应saas端&#xff0c;后台访问地址/admin。2、jjj_shop_multi_shop> 对应商城管理端&#xff0c;后台访问地址/shop。2、jjj_shop_multi_supplier> 对应供…