【是C++,不是C艹】 第一个C++程序 | 命名空间 | 输入输出

news2024/11/17 15:58:10

💞💞 欢迎来到 Claffic 的博客 💞💞

  👉专栏:《是C++,不是C艹》👈

前言: 

在认识了C++的来历之后,我们就要开始正式学习C++了,系好安全带,准备出发!

注:

你最好是学完了C语言,并学过一些初阶的数据结构。


Part1:给C++打个招呼

1.Hello,cpp!

从创建项目开始,添加项的时候终于不用删pp了😝

我上来就是!!!一个左正蹬...,额不,一个C++程序:

#include<iostream>
using namespace std;
int main()
{
	cout << "Hello,cpp!" << endl;
	return 0;
}

唱跳rap篮球 + F5:

你乍一看这代码,好像熟悉又陌生... ...

说熟悉吧,int main()  return 0; 是明白的,跟C语言的一模一样;

说陌生,<iostream>是啥?using... ? 还有 cout , endl,不认识。

开始怀念C语言了:

#include<stdio.h>
int main()
{
	printf("Hello,cpp!\n");
	return 0;
}

输出相同: 

既然结果相同,那两种写法每个语句之间是不是有一些微妙的关系?
欸,继续向下看,你会找到答案。

2.关键字

C++总计63个关键字,C语言32个关键字

下面是C++关键字的汇总表,你大体见见模样即可:

C++的关键字的丰富感有没有?

Part2:命名空间(namespace)

1.为何而来?

不知道大家在C语言中有没有这样的经历:
不小心把自己的变量名设置成C语言的关键字/函数名了,导致命名冲突; 

上一个例子恶心你👻:

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

int rand = 114514;
int main()
{
	printf("%d\n", rand); // stdlib.h 里的 rand 还是 全局中定义的 rand ?
	return 0;
}

报错: 

命名空间基本上就是为了解决这个问题的:

使用命名空间的目的是对标识符的名称进行本地化 ,以 避免命名冲突或名字 污染。

知道 namespace 对C语言的改善作用了吧。

2.命名空间的定义

一图就懂:

那命名空间的成员可以是什么?

可以定义变量 / 函数 / 类型

如: 

namespace Claffic
{
	// 定义变量
	int x = 10;
	// 定义函数
	int Add(int left, int right)
	{
		return left + right;
	}
	// 定义结构体类型
	struct Node
	{
		int val;
		struct Node* next;
	};
}

你以为到这就结束了?

不,命名空间还可以嵌套

// 命名空间可以嵌套
// Test.cpp
namespace N1
{
	int a;
	int b;
	int Add(int x, int y)
	{
		return x + y;
	}
	namespace N2 // 被N1嵌套在内
	{
		int c;
		int d;
		int Sub(int x, int y)
		{
			return x - y;
		}
	}
}

而且而且,

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

// Test.h
namespace N1
{
	int Mul(int x, int y)
	{
		return x * y;
	}
}

ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个 

3.命名空间的使用

这里定义一个命名空间:

namespace Claffic
{
	int a = 0;
	int b = 1;
	int Add(int x, int y)
	{
		return x + y;
	}
	struct Node
	{
		int val;
		struct Node* next;
	};
}

如果我们想全局变量那样直接使用,会出现错误:

打开方式不对... ... 

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

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

命名空间名称 :: 要使用成员
int main()
{
	printf("%d\n", Claffic::a);
	return 0;
}

• 使用using将命名空间中某个成员引入  

using 命名空间名称 :: 要使用成员
using Claffic::a;
int main()
{
	printf("%d\n", a);
	return 0;
}
• 使用using namespace 命名空间名称引入 

using namespace 命名空间名称
using namespace Claffic;
int main()
{
	printf("%d\n", a);
	printf("%d\n", b);
	Add(2, 3);
	return 0;
}

这种用法可以使用命名空间中的所有成员;

看到这里,是不是觉得似曾相识?

在跟C++打招呼的时候,开头就用了这种命名空间使用,std 就是标准库中的一个命名空间,

包含了相应的头文件并且引用了它,就可以使用其中的 cout endl

不卖关子了,直接告诉你吧,endl 就相当于 \n ,换行符;

至于 cout 嘛,嘿嘿,下面讲的就是它:

Part3:C++输入和输出

1.标准输入输出

cout         // 标准输出
cin          // 标准输入
使用上述两个东东时,必须 包含  <iostream>  头文件 以及按命名空间使用方法使用std;
endl 是特殊的 C++ 符号,表示换行输出,他们都包含在包含  <iostream>  头文件中。

有了这些还不够,还有两个像大于/小于号的东西:

<<  是流插入运算符, >>  是流提取运算符:
int a = 0;
cin >> a;
cout << "abcdef" << a << endl;

二者是这样配合使用的。

与C语言相比,是不是输入输出更加方便了?

因为它不需要像 printf/scanf 输入输出时那样,需要手动控制格式;
C++ 的输入输出可以自动识别变量类型。

 

2.std 命名空间的使用惯例

std C++ 标准库的命名空间,如何展开 std 使用更合理呢?

using namespace std 就是一种使用方式,

这种使用方式就很方便,适合日常的练习。

但是在项目开发中,代码多,规模大,就容易出现命名冲突的问题,

所以在这种情况下,建议指定使用的命名空间

using std::cin;
using std::cout;

Part4:溯源

“溯源”大题小用🤣🤣🤣

其实就是再看篇头那段代码:

#include<iostream>
using namespace std;
int main()
{
	cout << "Hello,cpp!" << endl;
	return 0;
}

到这里,我相信你已经能够解读这一段代码了:

#include<iostream>     // 引用头文件
using namespace std;   // 展开std命名空间
// 二者配合使用,可用cout,endl关键字
cout << "Hello,cpp!";
// 标准输出,配合 << (流提取运算符)使用
endl 相当于C语言中的 '\n' 换行符


总结: 

这期博客,以 Hello cpp 起,Hello cpp 收,带大家写下了第一个C++程序,并向大家解释了命名空间和输入输出等重要知识内容,你学的怎么样呢?

码文不易 

如果你觉得这篇文章还不错并且对你有帮助,不妨支持一波哦  💗💗💗

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

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

相关文章

阿里云安全ACP认证考试实验之云盾之云安全中心与态势感知入门体验

“更多玩转云产品” 1、实验概述 通过本实验可对云安全中心&#xff0c;态势感知的一些基本操作有深入了解以及如何来对实例进行安全监控 2、实验目标 完成此实验可以掌握的能力有&#xff1a; 在安骑士中添加白名单、登录安全设置 通过态势感知查看实例的相关告警威胁 3…

数值区间的模糊匹配,二分查找的应用

先看图: 需求很明确,要根据左边的值,显示右边的值。 比如,现在拿到的值是 17.12,那么应该显示成 15;拿到 17.599 ,那么应该显示成 20. 先找规律: 为了便于说明,暂且将左边的值设为 x, 右边的值设为 y. 第一行和最后一行可以写死成 0 与 1500;余下的每行,x 的区间是…

Vue CLI 创建一个项目

vue create 运行以下命令来创建一个新项目&#xff1a; vue create hello-world警告 如果你在 Windows 上通过 minTTY 使用 Git Bash&#xff0c;交互提示符并不工作。你必须通过 winpty vue.cmd create hello-world 启动这个命令。不过&#xff0c;如果你仍想使用 vue crea…

发布会前准备新闻通稿的重要性,为什么媒体不会原稿发布报道?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体 胡老师。 最近有宣传的小伙伴问胡老师&#xff0c;为什么我们精心准备的新闻通稿&#xff0c;媒体没有按照稿子发布呢&#xff1f;今天就与大家交流下这方面的经验。 一&#xff0c;发布会前准备新…

中断嵌套实验

使用汇编语言&#xff0c;要求&#xff1a; 外部中断1可以嵌套外部中断0 没有中断时&#xff0c;8个LED发光二极管以0.1s的速度闪烁。 有外部中断0时&#xff0c;8个LED发光二极管以0.1s的速度流水点亮。&#xff08;中断子程序0&#xff09; 有外部中断1时&#xff0c;会打断外…

还在为招生发愁?一文get中外合办院校招生技巧

生源&#xff0c;是任何一所高校的生存之本和生命线。因此&#xff0c;正确的招生策略&#xff0c;对于院校来说显得格外重要。 近几年&#xff0c;越来越多的家长和学生开始关注中外合办大学&#xff0c;随之而来的中外合办大学的生源竞争也越来越激烈。那么&#xff0c;有哪…

学好虚拟化,首先要学Linux

上次讲到了虚拟化的基础知识&#xff0c;比如虚拟化的应用、各个厂商都是通过何种技术路径来实现的等等&#xff0c;本篇想记录一下我学习到的CPU内存虚拟化和网络虚拟化相关知识&#xff0c;通过记录来制造反馈&#xff0c;让自己更有效地学习。需要注意的是&#xff0c;学习虚…

这 7个 AI 写作助手,太实用了

想象一下&#xff1a;你正在办公桌前为你的广告输入标题&#xff0c;但你突然思维阻塞并卡住了&#xff0c;可惜这时还没有神奇的软件可以帮助你想出点子。或许是有的&#xff1f; 2023 年&#xff0c;AI 写作工具似乎不可避免地会很快融入我们的工作流程中。现代知识工作者已…

政府大数据中心数据资源平台建设方案WORD2022

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 1.1 项目建设内容 对于本次区级大数据资源平台的建设&#xff0c;将按照“总体规划一步到位&#xff0c;平台建设分步实施&#xff0c;数据赋能逐步升级”的原则&#xff0c;落…

理解什么是DTO?什么是AutoMapper?

什么是DTO? .Net DTO是一个对象&#xff0c;它定义了数据如何在网络上发送。它只用于发送和接收数据&#xff0c;不包含任何业务逻辑。使用DTO的原因有以下几个&#xff1a; 将服务层与数据库层分离隐藏客户端不需要查看的特定属性省略一些属性以减少有效负载大小处理嵌套对象…

【LeetCode: 233. 数字 1 的个数 | 暴力递归=>记忆化搜索=>动态规划 | 数位dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别

1、Term Suggester term suggester 正如其名&#xff0c;只基于 tokenizer 之后的单个 term 去匹配建议词&#xff0c;并不会考虑多个term之间的关系 POST <index>/_search { "suggest": {"<suggest_name>": {"text": "<s…

VM——VMware装Centos

一、创建虚拟机配置 打开VMware&#xff0c;创建新虚拟机 选择自定义&#xff0c;下一步 选择16.x&#xff0c;然后下一步 选择稍后安装&#xff0c;然后下一步 选择Linux、镜像版本&#xff0c;然后下一步 输入虚拟机名称&#xff0c;选择存放位置&#xff0c;然后下一步 选择…

串口UART介绍

【记录所学】 1. 串口的硬件介绍 UART的全称是Universal Asynchronous Receiver and Transmitter&#xff0c;即异步发送和接收。串口在嵌入式中用途非常的广泛&#xff0c;主要的用途有&#xff1a; 打印调试信息&#xff1b;外接各种模块&#xff1a;GPS、蓝牙&#xff1b…

【java web篇】MyBatis实现增删改查

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

Git使用教程:从入门到精通(以Gitee为例)

一、前言 Git是一款分布式版本控制系统&#xff0c;可以帮助开发者更好地管理代码。在众多的Git平台中&#xff0c;Gitee是国内最受欢迎的Git平台之一。本篇文章将介绍如何使用Git进行代码管理&#xff0c;并以Gitee为例&#xff0c;详细讲解Git的基本操作和常用命令。 二、深入…

JS学习笔记(一)

从编程模式看&#xff1a;JS是结构化、事件驱动的动态语言&#xff0c;支持声明式和指令式两种模式&#xff0c;所以JS是一个多模式的语言。面向对象和函数式是常用的两种模式。 函数式编程 基本概念&#xff1a;函数是什么&#xff1f;函数是数据集到目标的一种关系。在函数式…

Windows逆向安全(一)之基础知识(十)

汇编一维数组 之前的文章学习过了四种基本类型&#xff1a;char short int long的汇编表示形式 因为它们的数据宽度都小于等于32位&#xff0c;所以都可以只用一个通用寄存器来存储 接下来的数组显然就无法只用一个通用寄存器就可以存储了 在学习数组之前&#xff0c;再学习…

云可见性和端口欺骗:已知的未知

与所有技术一样&#xff0c;新工具是建立在以前的基础上的迭代&#xff0c;经典的网络日志记录和指标也不例外。 网络流量的工具、检测和监控在私有云和内部部署中几乎没有变化。今天使用的许多日志和指标已有将近二十年的历史&#xff0c;最初是为了解决计费等问题而设计的。…

Node 08-express框架

express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a; https://www.expressjs.com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB 应用(HTTP 服务)…