C++——命名空间,输入输出,缺省参数

news2024/11/27 8:27:33

 ✅<1>主页:我的代码爱吃辣
📃<2>知识讲解:数据结构——二叉树
🔥<3>创作者:我的代码爱吃辣
☂️<4>开发环境:Visual Studio 2022
💬<5>前言:补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。

目录

一.命名空间

(1)命名空间的定义

(2)命名空间的使用

1.访问方法

 2.命名空间的嵌套

  (3)全局域

 二.输入&&输出

    (1) cout

 (2)cin

 (3)cin cout自动是识别类型

 三.命名空间的展开

(1)使用using namespace 命名空间名称引入

(2)使用using将命名空间中某个成员引入

四.缺省参数

  (1)缺省参数概念

(2)缺省参数分类

1.全缺省参数

2.半缺省参数

3.注意:

五.最后

博学之,审问之,慎思之,明辨之,笃行之。——《礼记》


一.命名空间

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

例如:

#include<stdio.h>

int rand = 10;
int main()
{
	int a = 10;
	return 0;
}

这时候代码没有任何问题。

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

int rand = 10;
int main()
{
	int a = 10;
	return 0;
}

 出现这个问题,我们知道,在头文件<stdlib.h>里面有一个函数rand(),所以头文件展开后就会出现定义冲突的现象。在C++中为了避免这种,利用命名空间。

(1)命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}
中即为命名空间的成员。

#include<stdio.h>

namespace ytt
{
	int a = 5;
}

int a = 10;
int main()
{
	printf("%d", a);
	return 0;
}

 这样就不会有定义冲突的问题了,那如果我们想访问,值为5的那个变量a,又要怎么办呢?

(2)命名空间的使用

 如果直接访问是访问不到的。

1.访问方法

命名空间的名称 +  :: + 命名空间内的变量或者函数。

namespace ytt
{
	int a = 5;
	int Add(int a, int b)
	{
		return a + b;
	}
}
int main()
{
	printf("a=%d\n", ytt::a);
	printf("4+5=%d\n", ytt::Add(4 , 5));
	return 0;
}

 2.命名空间的嵌套

namespace ytt
{
	int Add(int a, int b)
	{
		return a + b;
	}
	namespace wq
	{
		int Max(int a, int b)
		{
			return a > b ? a : b;
		}
	}
}
int main()
{
	printf("Max=%d\n", ytt::wq::Max(10, 15));
	return 0;
}

嵌套的情况下,就是一层一层访问:

 (3)全局域

访问全局域,只需要  :: +  全局变量

namespace ytt
{
	int a = 10;
}
int a = 5;
int main()
{
	int a = 1;
	//局部a
	printf("a=%d\n", a);
	//全局a
	printf("a=%d\n", ytt::a);
	//命名空间内的a
	printf("a=%d\n", ::a);
	return 0;
}

 二.输入&&输出

C++的输入输出是函数:cin,cout,被包含在头文件 <iostream> 中。

(1) cout

#include<iostream>
int main()
{
	std::cout << "hello world" << std:: endl;
	std::cout << "hello world\n";
    return 0;
}

<<是流插入运算符

有了前面,命名空间的学习,我们也就能看出来了,cout 也是被封装到命名空间 std里面的,endl 是封装在 std 里面的换行符,和 ' \n '是一样的。

 (2)cin

#include<iostream>
int main()
{
	int a = 0;
	std::cin >> a;
	std::cout << "a = " << a;
    return 0;
}

>>是流提取运算符,cin 也是被封装到命名空间 std里面的。

实际上cout和cin分别是 ostream 和 istream 类型的对象,>>和<<也涉及运算符重载等知识,
这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有
一个章节更深入的学习IO流用法及原理。 

(3)cin cout自动是识别类型

cin cout 相对于 C语言的scnaf printf,少了类型的修饰,所以在C++中,cin 和 cout是可以自动识别类型的。

int main()
{
	int a = 0;
	double b = 0;
	char c = 0;
	std::cin >> a >> b >> c;
	std::cout << a <<std::endl;
	std::cout << b << std::endl; 
	std::cout << c << std::endl;
	return 0;
}

 三.命名空间的展开

(1)使用using namespace 命名空间名称引入

我们在写程序的时候,有时候会发生,某个命名空间的变量名,函数名,经常被使用,我们每一次使用都要加上命名空间,会非常麻烦。所以我们使用using namespace 命名空间名称引入。

#include<iostream>
namespace ytt
{
	int a = 0;
	int b = 2;
}
using namespace ytt;
using namespace std;
int main()
{
	cout << a << endl;
	cout << b << endl;
    return 0;
}

这样使用就是将命名空间的所有定义全部展开,这样虽然使得我们不用每次都去包含命名空间,到那时也使得我们辛辛苦苦建立的命名空间也就没有了意义。因为都在这里展开了,就会发生定义相同的冲突。所以这种使用方法在企业开发时禁止的,我们平时练习代码时,为了方便可以使用。

(2)使用using将命名空间中某个成员引入

上述使用使用using namespace 将整个命名空间展开,会有造成冲突的可能,我们还可以将命名空间的某一成员引入。


#include<iostream>
namespace ytt
{
	int a = 0;
	int b = 2;
}
using ytt::a;
using ytt::b;
using std::cout;
using std::endl;
int main()
{
	cout << a << endl;
	cout << b << endl;
    return 0;
}

四.缺省参数

(1)缺省参数概念

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

#include<iostream>
using std::cout;
using std::endl;
void fun(int a = 10)
{
	cout << a << endl;
}
int main()
{
	fun();  //没传参数,使用缺省参数
	fun(100);//传了参数,就使用传的参数
	return 0;
}

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

调用时:

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();         //true
	Func(1);        //true
	Func(1, 2);     //true
	Func(1, 2, 3);  //true
	Func(, 1, 2);   //error
    Func(1, , 3);   //error
	return 0;
}

 带有缺省参数的函数,传参数时必须从左往右连续,不能跳着给参数。

2.半缺省参数

void Func(int a, int b = 10, int c = 20)
{
    cout<<"a = "<<a<<endl;
    cout<<"b = "<<b<<endl;
    cout<<"c = "<<c<<endl;
}

3.注意:

1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现

#include<iostream>

using std::cout;
using std::endl;
//函数声明
void Func(int a = 10, int b = 20, int c = 30);
int main()
{
	Func();         //true
	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;
}

 3. 缺省值必须是常量或者全局变量

五.最后

博学之,审问之,慎思之,明辨之,笃行之。——《礼记》

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

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

相关文章

Java 诊断利器 Arthas JVM命令

一、jvm 相关命令介绍 命令说明dashboard当前系统的实时数据面板getstatic查看类的静态属性heapdumpdump java heap, 类似 jmap 命令的 heap dump 功能jvm查看当前 JVM 的信息logger查看和修改 loggermbean查看 Mbean 的信息memory查看 JVM 的内存信息ognl执行 ognl 表达式per…

【Android春招】Android基础day2

一、填空题 1&#xff0e;除了开启开发者选项之外&#xff0c;还需打开手机上的 _ 开关&#xff0c;然后才能在手机上调试App。 USB调试 2&#xff0e;App开发的两大技术路线包括 _和混合开发。 原生开发 3&#xff0e;App工程的编译配置文件名为 _。 build.gradle 4&#xff0…

挂载光盘,配置yum源并且安装http软件包 ansible(4)

目录 一、挂载本地光盘到/mnt 二、配置yum源 一、挂载本地光盘到/mnt 第一步&#xff1a; 使用mount模块 注&#xff1a;fstype代表文件格式 二、配置yum源 第一种方法&#xff1a; 使用yum_repository模块 检验是否有对应文件在受控主机node1受控主机&#xff1a;node2受控…

Zipkin数据持久化配置

上一篇我们了解了Zipkin的基础知识以及Zipkin的服务端搭建。 在使用过程中很多同学发现了他的秘密&#xff0c;Zipkin模式将数据保存在内存中&#xff0c;当我们重启后&#xff0c;追踪数据便会丢失。其实&#xff0c;Zipkin也支持将追踪数据保存到MySql或者ES中。 持久化到M…

大数据基础平台搭建-(四)HBbase集群HA+Zookeeper搭建

大数据基础平台搭建-&#xff08;四&#xff09;HBbase集群HAZookeeper搭建 大数据平台系列文章&#xff1a; 1、大数据基础平台搭建-&#xff08;一&#xff09;基础环境准备 2、大数据基础平台搭建-&#xff08;二&#xff09;Hadoop集群搭建 3、大数据基础平台搭建-&#xf…

Linux学习笔记——Nginx安装部署

5.3、Nginx安装部署 5.3.1、简介 Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理Web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。 同Tomcat一样&#xff0c;Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务&#xff0c;同时也可以作为…

二十七、Docker (3)

&#x1f33b;&#x1f33b; 目录一、java开发者Docker常用镜像容器创建&#xff08;本地&#xff09;1.1 资源上传1.2 还原部署1.2.1 部署jdk1.2.2 部署tomcat1.2.3 部署nginx1.2.4 部署mysql二、java开发者Docker常用镜像容器创建(官网拉取)2.1 jdk部署2.1.1 拉取jdk镜像2.1.…

verilog学习笔记- 7)verilog程序框架

目录 注释&#xff1a; 关键字&#xff1a; Verilog常用的关键字&#xff1a; 程序框架&#xff1a; 注释&#xff1a; Verilog HDL 中有两种注释的方式&#xff0c;一种是以“/*”符号开始&#xff0c;“*/”结束&#xff0c;在两个符号之间的语句都 是注释语句&#xff…

7-10 集合相似度

给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输出格式&#xff1a; 对每一对需要计算的集合&…

DaVinci:键 - 键混合器

调色页面&#xff1a;键Color&#xff1a;Key当选中一个键混合器节点时&#xff0c;键 Key调板上对应显示键混合器 Key Mixer的相关选项。键混合器节点默认有两个输入链接。可在键混合器节点上右击选择“添加”或“移除”一个输入。所有的输入链接和惟一的输出链接均可在键调板…

Elasticsearch在各大互联网公司大量真实的应用案例

国内现在有大量的公司都在使用 Elasticsearch&#xff0c;包括携程、滴滴、今日头条、饿了么、360安全、小米、vivo等诸多知名公司。 除了搜索之外&#xff0c;结合Kibana、Logstash、Beats&#xff0c;Elastic Stack还被广泛运用在大数据近实时分析领域&#xff0c;包括日志分…

SQL如何在数据库中执行

数据库的服务端&#xff0c;可分为执行器(Execution Engine) 和 存储引擎(Storage Engine) 两部分&#xff1a; 执行器负责解析SQL执行查询存储引擎负责保存数据 1 SQL如何在执行器中执行 # 查询用户ID大于50的用户的所有订单 SELECT u.id AS user_id, u.name AS user_name,…

详解回调函数

目录 前言 一、 实现一个简单的计算器 1.1 - 代码一 1.2 - 代码二 二、qsort 函数的介绍 三、改进冒泡排序函数 前言 回调函数就是一个通过函数指针调用的函数。如果把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其…

微信公众号调用扫一扫功能

手把手教你调用微信扫一扫&#xff0c;三分钟包会_前端人的博客-CSDN博客_调用微信扫一扫 第一次搞公众号&#xff0c;还以为跟上回调用企业微信扫一扫一样。。。调起扫一扫功能的过程自然是不同的&#xff0c;要注意的地方还挺多&#xff0c;记录一下 。 其实&#xff0c;在使…

2023最新网络安全自学路线,内容涵盖3-5年技能提升

前言 先预祝大家新年快乐&#xff01; 【一一帮助网络安全入门和提升点这里一一】 01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究…

改进MBR(操作显卡来输出字符)

文章目录前言前置知识mbr.S代码实验操作前言 本博客记录《操作系统真象还原》第二章第一个实验操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;在屏幕上打印字符串【采用的方式是直接修改显存实现】 实验原因&#xff1a;mb…

Flutter性能优化

原理 Flutter的架构主要分成三层&#xff1a;Framework&#xff0c;Engine和Embedder Framework 使用 dart 实现&#xff0c;包括 Material Design 风格的Widget&#xff0c;Cupertino(针对iOS)风格的Widgets&#xff0c;UI/文本/图片/按钮等基础 Widgets&#xff0c;渲染&…

设计模式学习(一):Bridge桥接模式

一、什么是Bridge模式Bridge模式的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。1.1 类的功能层次结构主要作用就是增加新的功能。当我们要增加新的功能时&#xff0c;我们可以从各个层次的类中找出最符合自己需求的类&#xff0c;然后以它为父类编写子类…

(Week 10)最小生成树(C++,prim,Kruskal,并查集)

文章目录Einstein学画画&#xff08;C&#xff0c;欧拉路&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路&#xff1a;并查集&#xff08;C&#xff09;[蓝桥杯 2017 国 C] 合根植物&#xff08;C&#xff0c;并查集&#xff09;题目描述输入格…

基于Java+SpringBoot+vue+element实现校园闲置物品交易网站

基于JavaSpringBootvueelement实现校园闲置物品交易网站 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于JavaSpri…