【C++入门系列】——命名空间和输入输出

news2024/11/17 10:44:36

作者主页

📚lovewold少个r博客主页

   ⚠️本文重点c++入门第一个程序和基本知识讲解

😄每日一言:忙,不会死,人只有越忙越活,流水不腐,户枢不蠹。

目录

​作者主页

前言

谈谈我个人对语言和职业的看法

C++的历史发展

C++第一个程序

命名空间

定义命名空间

使用此命名空间

命名空间可以嵌套

相同命名空间可以合并

​编辑

输入和输出

std::cout

控制符endl

换行符

std::cin


前言

        C语言的作为大多数人的入门语言,我们逐渐习惯了C语言的语法规范和一些对底层细致入微的操作。同时,无论是在线上OJ题还是一些常见问题上,C语言却没有那么好用,总是陷入重复造轮子的痛苦之中。C有C语言的优势之处,也有他的缺陷,而C++的初步诞生就是以解决C缺陷而创造的语言并演化至今,成为了当今的主流语言之一。C++语言在学习难度上也不小,在学习难度上前期的学习难度比java要难一个层次,不过问题不大,学计算机就是干。

谈谈我个人对语言和职业的看法

        作为一名大学生,在职业规划的道路上,可能总会因为网络的各种繁杂信息,总是会纠结于选什么语言。互联网寒冬目前也作为一个不争的事实,有人说是因为经济的持续低迷,又有人说是因为互联网的环境影响。总而言之,外部的信息似乎并不能影响我们的选择,为何怎么说。因为外部的信息总是会将一个缺点无限放大,我们也总能听见各种“C++已死,Java已死”,又或者是“Python主流,Rust崛起,今年学Java狠狠赚一笔”的言论,让自己的学习道路总是心生焦虑。不可否定的是某些语言在一些特定业务之上就是有其独有的优势才作为主流,以就业为目的的话拥抱最新技术无可厚非,那么拥抱什么样的技术才算是新技术呢。至少在大学的学习期间,我们能接触的不能算是新技术,我们自学也触摸不到新技术的层次,现在我们的目的应该是尽可能的贴近主流职业规划道路,然后在后期的发展中尽可能发掘新风口,这可能不是单单学一门语言能解决的问题,需要有更多的硬实力。

        这种硬实力最大的应该是学习能力,再其次是对社会的风向感知能力,这些能力都不是能一蹴而就的,往往还需要更多基础的能力,类似于对底层原理的掌握程度,总会给后面的拥抱新技术带来更多可能性。这也是我想选择C++的一个理由,培养我对困难问题的探索能力,去剖析编程的有趣之处。我想在我热爱这一个选择的时候我能坚定不移的去坚持下去,而不是摇摆不定的以语言问题总是打压自己学习的道路。学习是一个上瘾的事情,坚持下去就是探知,摇摆不定反而会让自己陷入不知所谓的忙碌之中。

        学习C++对我而言的目的,主要是掌握一门功能强大的主流语言打下基础,为我以后能快速切换技术栈打下基础。语言不是决定性的道路,他只是一门趁手的工具,未来的诸多环境变化这个工具可能总是不太趁手,那个时候才是以硬实力,换工具只是一个熟练工具的时间问题。不去抵触新技术,新行业,新风向才可能有更高的上限吧!个人浅显理解,勿喷!

C++的历史发展

        1979年,丹麦计算机科学家Bjarne Stroustrup开始研究C++的前身“C with Classes”。创造一门新语言的动机源于斯特劳斯特鲁普为他的博士论文编程的经验。Stroustrup发现Simula具有对大型软件开发非常有用的功能,但该语言对于实际使用来说太慢了,而BCPL速度很快,但级别太低,不适合大型软件开发。当Stroustrup开始在AT&T贝尔实验室工作时,他遇到了分析UNIX内核与分布式计算有关的问题。回忆起他的博士经历,Stroustrup开始用类似Simula的功能来增强C语言。选择C是因为它是通用的,快速的,便携式的和广泛使用的。除了C和Simula的影响,其他语言也影响了这种新语言,包括ALGOL 68,Ada,CLU和ML。

        最初,Stroustrup的“C with Classes”为C编译器Cpre添加了功能,包括类,派生类,强类型,内联和默认参数。

        1982年,Stroustrup开始开发带有类的C的后继者,在经历了其他几个名称后,他将其命名为“C++”(C中的增量运算符)。添加了新功能,包括虚函数、函数名称和运算符重载、引用、常量、类型安全的自由存储内存分配(新建/删除)、改进的类型检查以及带有两个正斜杠的 BCPL 样式单行注释 ()。此外,Stroustrup还为C++开发了一个新的独立编译器Cfront。

        1984年,Stroustrup实现了第一个流输入/输出库。提供输出运算符而不是命名输出函数的想法是由Doug McIlroy提出的(他之前曾建议使用Unix管道)。

        1985年,第一版《C++编程语言》发布,成为该语言的权威参考,因为当时还没有官方标准。C++的第一个商业实现于同年20月发布。

        1989年,C++2.0发布,随后在1991年更新了第二版的C++编程语言。2.0中的新功能包括多重继承,抽象类,静态成员函数,常量成员函数和受保护成员。1990年,《注释C++参考手册》出版。这项工作成为未来标准的基础。后来添加的功能包括模板、异常、命名空间、新强制转换和布尔类型。

        1998年,C++98发布,标准化了语言,并于03年发布了一个小更新(C++2003)。

在C++98之后,C++发展相对缓慢,直到2011年C++11标准发布,增加了许多新功能,进一步扩大了标准库,并为C++程序员提供了更多的功能。在 14 年 2014 月发布的 C++17 小更新之后,C++25 中引入了各种新增功能。[2020]在26年20月定稿后,C++2020标准草案于15年2020月27日获得批准。

        Stroustrup被宣布为Charles Stark Draper工程奖的获得者,“以概念化和开发C++编程语言”。

        截至2022年C++在TIOBE指数上排名第三,在该指数历史上首次超过Java。它排名第3,仅次于Python和C。

C++第一个程序

对于编程世界的大佬还是小白,接触的第一个可能就是Hello world !这里我们的编译器照样可以使用vs,简单创建一个.cpp文件。

首先C++是兼容C语言的

这个程序你依旧可以使用c语言语法。我们可以发现相比于C,它既陌生又熟悉。熟悉的地方有很多,都有主函数入口,都有返回值,感觉并无而样,但是他们包含的头文件发生了变化,而且还多了个不知所谓的"using namespace",输出也不需要printf。

命名空间

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

        面对一个项目,由于分包后各个环节负责的人不同,他们的命名却可能相同,放在C语言项目中,这就是一个灾难,我们需要确定相同的命名并进行更改,那么程序员哪一位改自己的命名呢,要抉择的方式要么是比武,要么默默接受,那我改吧。

        不行,程序员就是程序员,为何还要因为命名相同来一场比武,C++的命名空间即可解决这个命名冲突问题。

       可以看见,在c语言中,rand在引入<stdlib.h>后函数显示重定义,既rand定义了两次,但是使用者认为我使用的rand和你库里面的rand本身就不是同一个东西,我是我的rand,你是你的rand,区分一下不可以么。

定义命名空间

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

使用此命名空间

命名空间命::变量名/函数····                     单独使用自己命名空间内部的变量   

        而在日常使用中,对于一个我们创建的命名空间,我们总是需要使用这种方式么。答案也是不需要的,可以一键展开命名空间,将围起的墙一键放倒,而这种方式只可以在一般日常学习中使用,或者在确保无重命名行为后展开,否则这种对于命名的封装也就失去了意义。

 using namespace 命名空间命                      展开此命名空间区域全部

using 命名空间名 ::变量名/函数名···            展开命名空间特定成员

命名空间可以嵌套

一个案例即可看明白嵌套的多种情况。

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

相同命名空间可以合并

对于同一个工程文件,最后编译器会把相同命名空间进行合并。

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

1. 在日常练习中,建议直接using namespace std即可,这样就很方便。

2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就 存在冲突问题。

        该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。


输入和输出

在c语言的编程中,用到的最多的两个库函数无外乎就是scanf, printf。使用的过程中,我们总是需要在内部强调输入类型和输出类型。这在明确定义的操作过程中是非常繁琐的,而C++也提供了输入输出函数。

std::cout

C++的输出在方式上更加形象,且会自动识别其参数类型,而不需要使用%d,%s诸如此类的格式占位符。是显示上也更加形象,字符串和参数是流传入cout就形成I/O方式的输出操作。

在下面操作中,双括号内容是字符串,是需要打印的信息。<<这个符号表示把该语句传递给cout;该符号指出了传递信息的路径。cout是一个预定义对象,而对象是什么在后面章节会讲解。能明确的对象的一个好处就是不需要知道他的内部情况,只需要知道他的接口就可以使用它。

cout还支持多个输出传递,可以理解为从左往右依次传递流。

控制符endl

cout<<endl

endl是一个特殊的c++符号,表示一个概念:重起一行,在输出流中插入的endl将导致屏幕的光标移到下一行开头。诸如endl等对于cout有特殊含义的称之为控制符(manipulator)。和cout一样,endl也是在头文件iostream中定义的,且位于命名空间std。

换行符

/n

这一位就是老朋友了,使用和c语言方式一样,在输出内容要换行的位置加换行符号即可。

输入输出printf /scanf在c++程序中一样可以使用,因此面对与控制精度等打印操作一方面可以使用c++的内容,也可以完美的使用printf控制精度输出。

std::cin

上述的cin语句,从键盘上依次读取值然后分别赋值给a,b。从上面可以看出来,信息从cin流向了a,接着流向,b。就像c++将输出看作是输出的字符流一样,他也将输入看作是流入程序的字符流。iostream文件中将cin定义为了一个表示这种流的对象,输出时,<<运算符将字符串插入到输出流当中。输入时,cin使用>>运算符从输入流中抽取字符,通常需要在其右边提供一个变量用于接受信息。所以我们可以看见<<  , > >用来选择信息流的方向。

#include<iostream>
using namespace std;

int sum(int a,int b)
{
	return a + b;
}
int main()
{
	int a = 0;
	int b = 0;
	cout << "请输入a b:" << endl;
	cin >> a >> b;
	int c = sum(a, b);
	cout << "输出sum:" << c;
}

运行结果:


        好了,目前你已经初步掌握c++的输入输出和命名空间的使用,如果你会C语言,已经可以用起来了。

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

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

相关文章

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

概述 12v / 24v智能模拟高侧MOSFET栅极驱动器。 特性 PRO-SIL ISO 26262-准备根据ISO 26262:2018条款8-13支持硬件元件评估的集成商。一个通道器件具有两个高侧栅极驱动器输出。3 Ω下拉,50 Ω上拉,用于快速开关开/关。支持背靠背MOSFET拓扑(共漏极和共源)。两个双向高侧模拟…

C/C++ 线程超详细讲解(系统性学习day10)

目录 前言 一、线程基础 1.概念 2.一个进程中多个线程特征 2.1 线程共有资源 2.2 线程私有资源 3.线程相关的api函数 3.1 创建线程 创建线程实例代码如下&#xff1a; 需要特别注意的是&#xff1a; -lpthread和-pthread的区别 3.2 给线程函数传参 传参实例代码如…

生命在于学习——Stable Diffution(Mac端)

一、前言 最近一段时间研究了一下Stable Diffution&#xff0c;Windows和MAC端都搭建成功了&#xff0c;也尝试了各种功能&#xff0c;后续会学习新的使用姿势&#xff0c;写一篇文章记录一下。 二、介绍 1、Stable Diffution是什么 Stable Diffusion&#xff0c;是一种AI绘…

如何处理前端安全性问题(XSS、CSRF等)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

记一次生产大对象及GC时长优化经验

最近在做一次系统整体优化,发现系统存在GC时长过长及JVM内存溢出的问题,记录一下优化的过程 面试的时候我们都被问过如何处理生产问题&#xff0c;尤其是线上oom或者GC调优的问题更是必问&#xff0c;所以到底应该如何发现解决这些问题呢&#xff0c;用真实的场景实操&#xff…

PHP LFI 利用临时文件Getshell

PHP LFI 利用临时文件 Getshell 姿势-安全客 - 安全资讯平台 LFI 绕过 Session 包含限制 Getshell-安全客 - 安全资讯平台 目录 PHP LFI 利用临时文件Getshell 临时文件 linux 和 windows的 临时文件存储规则 linux和windows对临时文件的命名规则 PHPINFO()特性 原理 条…

前端项目--尚医通学习分享

这段时间跟着线上课程完成了一个项目&#xff1a;商医通&#xff08;基于Vue3TypeScript的医院挂号平台&#xff09;。具体我就不过多地介绍其具体功能以及详细的实现步骤了&#xff0c;感兴趣的小伙伴直接&#xff1a;传送门 。该文章我就分享一下在该项目中学习到的一些知识点…

如何退出commit_message页面

虽然提示命令了&#xff0c;但我试了&#xff0c;退不出去。我没搞明白。。。 退出编辑 Crtl Z设置git的编辑器为vim或vi git config --global core.editor vim如果没有vim编辑器&#xff0c;设置成vi编辑器也行 git config --global core.editor vi重新提交 再次进入commi…

【高等数学】极限(上)(最全万字详解)

文章目录 1、数列的极限1.1、数列极限的定义1.2、为什么收敛数列极限是唯一的&#xff1f;1.3、为什么收敛数列是有界的&#xff1f;1.4、数列极限的保号性1.4.1、极限保数列值1.4.2、数列值保极限值 1.5、收敛数列与其子列之间的关系 2、函数极限概念2.1、函数极限的定义2.1.1…

[Unity][VR]Passthrough2-创建一个基本的Passthrough应用

上一期我们对PassthroughXR项目做好了基本的项目设置,今天我们就开始构建一个基本的Passthrough应用。 我们还是从基本场景开始。先把默认的main camera删除。因为后续我们会引入OVR Rig对象,这个对象自带Camera用来实现VR视角。 在Project面板我们搜索OVR camera rig。看见…

【java学习】方法的重载overload(19)

文章目录 1. 重载的概念 1. 重载的概念 在同一个类中&#xff0c;允许存在一个以上的同名方法&#xff0c;只要它们的参数个数或者参数类型不同即可。 重载的特点&#xff1a;     与返回值类型无关&#xff0c;只看参数列表&#xff0c;且参数列表必须不同。 ( 参数个数或…

nodejs+vue家教管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框架介绍 6 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性…

k8s强制删除pod、svc、namespace(Terminating)

如果名称空间、pod、pv、pvc全部处于“Terminating”状态时&#xff0c;此时的该名称空间下的所有控制器都已经被删除了&#xff0c;之所以出现pod、pvc、pv、ns无法删除&#xff0c;那是因为kubelet 阻塞&#xff0c;有其他的资源在使用该namespace&#xff0c;比如CRD等&…

【ElasticSearch】更新es索引生命周期策略,策略何时对索引生效

大家好&#xff0c;我是好学的小师弟&#xff0c;今天和大家讨论下更新es索引生命周期策略后&#xff0c;策略何时对索引生效 结论: 若当前索引已应用策略A(旧)&#xff0c;更新完策略A后&#xff0c;新的策略A会立即对原来的已经应用该策略的索引生效&#xff1b;若当前索引…

Webpack 解决:ReferenceError: dist is not defined 的问题

1、问题描述&#xff1a; 其一、报错为&#xff1a; ReferenceError: dist is not defined 中文为&#xff1a; ReferenceError&#xff1a;dist 未定义 其二、问题描述为&#xff1a; 想在 webpack 的配置中&#xff0c;创建一个 dist 文件夹来存放 npm run build 打包后…

docker- harbor私有仓库部署与管理

什么是 harbor harbor是一个开源的云原生镜像仓库&#xff0c;它允许用户存储、签名、和分发docker镜像。可以将 harbor 看作是私有的docker hub &#xff0c;它提供了更新安全性和控制性&#xff0c;让组织能够安全的存储和管理镜像 harbor RBAC&#xff08;基于角色访问控制…

zsh: command not found: conda问题解决

参考:https://zhuanlan.zhihu.com/p/158703094 一、问题介绍与环境介绍 系统为macOS Catalina 10.15.4 所用终端为zsh 安装了oh-my-zsh之后conda命令在终端中不可用。 二、原因分析 终端中zsh的可访问的程序一般放在/bin, /usr/bin, /usr/local/bin&#xff0c;/bin目录下&…

Linux sed命令

在Linux系统中&#xff0c;有许多强大的文本处理工具&#xff0c;其中之一就是sed&#xff08;Stream Editor&#xff09;命令。sed是一个用于对文本进行编辑、替换、删除和过滤操作的命令行工具&#xff0c;一次处理一行内容。它具有强大的正则表达式支持和灵活的文本处理功能…

华为李鹏:加速5G商业正循环,拥抱更繁荣的5.5G(5G-A)

2023年10月10日&#xff0c;在华为主办的第十四届全球移动宽带论坛上&#xff0c;华为高级副总裁、运营商BG总裁李鹏面向来自全球的运营商和产业伙伴&#xff0c;提出抓住网络需求和趋势的力量——“面向后天的业务&#xff0c;积极规划明天的网络&#xff0c;加速5G商业正循环…

堆叠、集群技术

1.堆叠、集群技术的概述 堆叠、集群简介 堆叠&#xff08;iStack&#xff09;&#xff0c;将多台支持堆叠特性的交换机通过堆叠线缆连接在一起&#xff0c;从逻辑上虚拟成一台交换设备&#xff0c;作为一个整体参与数据转发。 集群&#xff08;Cluster Switch System&#xf…