c++入门之输入输出命名空间

news2024/12/29 1:16:23

文章目录

  • 前言
  • 一、输入输出
  • 二、命名空间
    • 1.使用命名空间的原因
    • 2.命名空间定义
    • 3.命名空间的定义注意事项
      • (1)命名空间只能在全局范围使用
      • (2)命名空间可以嵌套
      • (3)命名空间是开放的,可以随时添加新的成员
      • (4)命名空间的函数的声明和定义可以分开写
      • (5)无命名空间名称
      • (6)命名空间使用别名
    • 3.命名空间的使用
      • (1)加命名空间名称及作用域限定符
      • (2)使用using将命名空间中某个成员引入
      • (3)使用using namespace 命名空间名称 引入
  • 总结


在这里插入图片描述

前言


从这篇文章开始我就要步入c++的学习中来了,希望各位支持一下嘿嘿

一、输入输出

我们学习一门语言时,第一步都是学会输出Helloworld,那么我们就看看c++是怎么向屏幕输出Helloworld的,我们先上代码

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;
return 0;
}

运行结果
在这里插入图片描述
可能许多小伙伴不知道其中的一些符号是干什么用的,不慌,我们来一一道来

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
    以及按命名空间使用方法使用std
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
    iostream >头文件中。
  3. <<是流插入运算符,>>是流提取运算符

二、命名空间

1.使用命名空间的原因

为什么需要命名空间,我们拿c语言的代码来说

#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}

编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”,那么我们怎么使用rand呢?

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

2.命名空间定义

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

如下

namespace zyt
{
	// 命名空间中可以定义变量/函数/类型
    int a;
    int Add(int left, int right)
    {
      return left + right;
    }
    struct Node
	{
	struct Node* next;
	int val;
	};
    
}

3.命名空间的定义注意事项

(1)命名空间只能在全局范围使用

举个例子,如

//命名空间只能在全局范围使用(下面是错误代码)
void text1()
{
    namespace zyt
    {
        int a = 1;
    }
}

编译器会报错
在这里插入图片描述

(2)命名空间可以嵌套

namespace N1
{
    int a=10;
    namespace N2
    {
        int a=20;
    }
}

命名嵌套的使用需要注意(::是作用域限定符,后面会介绍)

 std::cout << N1::N2::a << endl;

(3)命名空间是开放的,可以随时添加新的成员

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中

namespace zyt
{
    int a;
}
//假设中间有很多代码(
namespace zyt
{
    int b;
}

(4)命名空间的函数的声明和定义可以分开写

namespace N3
{
    void fun();
}
void N3::fun()
{
    std::cout << N1::N2::a << endl;
}

注意函数定义时前面要写命名空间,不然就是一个普通的函数

(5)无命名空间名称

无命名空间.相当于给变量名添加了static,只可以作为内部链接

namespace
{
    int c;
}

然后我们就可以直接使用
在这里插入图片描述

下面展示一个错误写法

namespace
{
    int c;
}
int c;

在这里插入图片描述

(6)命名空间使用别名

namespace longname
{
    int a=10;
}
int main()
{
    namespace shortname = longname;
    std::cout << shortname ::a<<endl;

} 

在这里插入图片描述

3.命名空间的使用

命名空间的使用有三种方式:

(1)加命名空间名称及作用域限定符

int main()
{
printf("%d\n", N::a);
return 0;
}

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

using N::b;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
return 0;
}

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

using namespce N;
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
Add(10, 20);
return 0;
}

总结

谢谢大家看到这,希望你会收获,有错误请指正,后续我会继续更新c++的知识点

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

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

相关文章

mysql流程控制

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;数据库 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;请…

QT---制作简易串口助手

一、ui制作打开QTCreator创建一个新文件2.进入UI设计界面进行设计进入ui界面后&#xff0c;选择相应的控件将串口助手的样子给做出来&#xff0c;我选择的是如下的控件做这个串口助手&#xff1a;1.按钮&#xff1a;2.下拉列表3.标签4.组合框5.文本编辑绘制ui界面如下&#xff…

如何用Windows自带命令修改文件和图片的MD5

首先说下&#xff0c;md5到底是啥&#xff0c;它是一段固定长度的数据。无论原始数据是多长或多短&#xff0c;其MD5值都是128bit。另外md5是确定性&#xff0c;一个原始数据的MD5值是唯一的&#xff0c;同一个原始数据不可能会计算出多个不同的MD5值&#xff1b;类似人类的身份…

快速搭建前后端分离项目

后端 配置文件和依赖 创建一个SpringBoot项目&#xff0c;采用Mybatis-Plus快速构建项目。 application.yml进行配置 server:port: 80spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/ems?useSSLfalse&useUnicodetrue&charact…

C++——哈希

目录 unordered系列关联式容器 unordered_mapunordered_map在线文档说明 unordered_map的接口说明 unordered系列优势 哈希 解决哈希冲突 1.闭散列——开放定址法 思考&#xff1a;哈希表什么情况下进行扩容&#xff1f;如何扩容&#xff1f; 插入元素代码 查找元素 …

Linux操作系统--用户和群组(保姆级教程)

用户和群组 用户 什么是用户&#xff0c;即登录到linux操作系统的账号就是用户。在linux操作系统中账户的类别主要有三类&#xff1a;1、超级管理员&#xff08;root&#xff09;,在linux中超级管理员的账户是root&#xff0c;这个root账户就类似于windows操作系统中administr…

pom.xml配置中引入Oracle依赖

pom.xml配置中引入Oracle依赖1. Download Driver1.1 pom.xml2.Awakening1. Download Driver 因为Oracle是要收费的&#xff0c;所以不能通过远程的方式来引入&#xff0c;可以通过mvn指令导入到Maven本地仓库。 下载地址 Oracle Website: https://www.oracle.com/database/tech…

MyBatis案例 | 使用映射配置文件实现CRUD操作——查询所有数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JavaWeb Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&…

各类SDR的USB接口一致性测试

最近用高带宽示波器测了好几个SDR产品的USB2接口一致性。由于探头数量只有1个&#xff0c;所以不能测全所有的项目。但已经包含了最主要的USB眼图&#xff08;信号质量&#xff09;项目。 待测件包含&#xff1a; 1.原版RTL-SDR 2.自制RTL-SDR 3.HackRF 4.无线电罗盘v0.8 测试…

css实现超出div长度文字自动隐藏或用省略号表示

网页中一些区域的标题文字是不能换行的&#xff0c;例如首页显示的文章标题&#xff0c;因为布局是固定的&#xff0c;换行会打乱布局&#xff0c;从而使网页产生错位。因此&#xff0c;我们需要一行一段文字&#xff0c;超出行宽的文字用省略号表示或者直接去掉不用省略号代替…

在CentOS-6.9配置apache服务(1)---基于个人主页的身份验证

文章目录一 系统环境二 用户身份验证2.1 编写主配置文件2.2 编写用户身份验证的配置文件2.3 创建用户密码文件2.4 创建测试页面2.5 测试三 基于个人主页的身份验证3.1 修改主配置文件3.2 创建测试用户3.3 创建测试的个人主页3.4 设置防火墙和selinux3.5 测试在部署了apache服务…

LeetCode-189. 轮转数组

目录方法一&#xff1a;使用额外的数组方法二&#xff1a;环状替换方法三&#xff1a;数组翻转题目来源 189. 轮转数组 方法一&#xff1a;使用额外的数组 我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度&#xff0c;我们遍历原数组&#xff0c;将原…

JSP SSM校园超市管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSPssm 校园超市管理系统 是一套完善的系统源码&#xff0c;对理解JSP java SrpingMVC mybiats 框架 MVC编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档 &#xff0c;系统主要采用B/S模式开发。 研究的基…

Dubbo 中 Zookeeper 注册中心原理分析

本文通过分析Dubbo中ZooKeeper注册中心的实现ZooKeeperResitry的继承体系结构&#xff0c;自顶向下分析了AbstractRegistry&#xff08;提供了服务数据的本地缓存&#xff09;、FailbackRegistry&#xff08;服务注册订阅相关的异常重试&#xff09;、CacheableFailbackRegistr…

Web Spider Fiddler - JS Hook 基本使用

文章目录前言一、资源下载二、什么是Hook三、Hook 的几种方式四、Fiddler - 编程猫插件安装五、Fiddler - Hook 案例六、常用的js hook代码Hook CookieHook Header总结前言 Hook技术也叫钩子函数&#xff0c;功能是把网站的代码拉出来&#xff0c;改成我们自己想执行的代码片段…

mysql:性能分析工具

检查是否开启慢查询日志&#xff0c;查看慢查询的日志中的数据 也可以通过查看sql执行成本&#xff0c;进行优化 统计SQL的查询成本&#xff1a;last_query_cost SHOW STATUS LIKE ‘last_query_cost’; 查询优化器的成本&#xff0c;查看最后一个sql使用的多少数据页 定位执…

1-2MySQL 面试题

MySQL 面试题 1.说一下 MySQL 执行一条查询语句的内部执行过程&#xff1f; 答&#xff1a;MySQL 执行一条查询的流程如下&#xff1a; 客户端先通过连接器连接到 MySQL 服务器&#xff1b;连接器权限验证通过之后&#xff0c;先查询是否有查询缓存&#xff0c;如果有缓存&a…

大型React项目需要使用ES6解决方案以及对JSX的使用【React高级技术】

不使用 ES6 然而&#xff0c;在纯浏览器端使用ES6语法时&#xff0c;浏览器支持存在差异&#xff0c;这需要特殊处理才能正常运行。 支持ES2015桌面浏览器 Chrome&#xff1a;从51版开始&#xff0c;它可以支持ES6 97%的新功能。 Firefox&#xff1a;53版本支持97%的ES6新功能…

几个超级牛的在线 Python 解释器

安装 Python 很容易&#xff0c;但或许你正在用智能手机/平板电脑&#xff0c;在用不允许安装软件的电脑&#xff0c;或者因为其它原因无法安装 Python。那么&#xff0c;如何通过免安装的方式使用 Python 呢&#xff1f; 本文将介绍 18 个免费的 Python 解释器和交互式 Shell…

软测 · 软件测试的基本概念 · 什么是需求 · 测试用例的概念 · 软件错误(bug)的概念

一、什么是软件测试软件测试和开发的区别测试和调试的区别一个优秀的软件测试人员具备的素质二、什么是需求从测试人员角度看待需求三、测试用例的概念四、软件错误&#xff08;bug&#xff09;的概念一、什么是软件测试 最常见的解释是&#xff1a;软件测试就是找 BUG&#x…