【C++初阶(一)】学习前言 命名空间与IO流

本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

C++初阶(一)

  • 什么是C++
  • C++发展史
  • C++现状:
  • C++在工作领域中的应用
  • C++入门部分
    • C++关键字:
    • 命名空间:
      • 命名空间定义:
      • 命名空间的使用:
        • 方法一:加命名空间名称及作用域限定符(不展开命名空间)
        • 方法二:使用using将命名空间中某个成员引入(展开空间中部分内容)
        • 方法三:使用using namespace 命名空间名称 引入(展开空间中全部内容)
      • 对命名空间展开的思考
      • C++输入与输出:
        • cout(标准输出对象(控制台))
        • cin(标准输入对象(键盘))

什么是C++

C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

C++发展史

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

我们先来看下C++的历史版本:
在这里插入图片描述
现在公司主流使用还是C++98和C++11。

关于C++2X最新特性的讨论:
https://zhuanlan.zhihu.com/p/107360459

C++现状:

C/C++在TIOBE编程语言社区
常年位居前五
在23年更是霸榜前三!
在这里插入图片描述

C++在工作领域中的应用

  1. 操作系统以及大型系统软件开发
  2. 服务器端开发
  3. 游戏开发
  4. 嵌入式和物联网领域
  5. 数字图像处理
  6. 人工智能
  7. 分布式应用

C++入门部分

C++关键字:

C++总计63个关键字,C语言32个关键字。
在这里插入图片描述

命名空间:

在介绍命名空间之前,先看下面代码所示:

#include<stdio.h>int rand = 10;int main()
{printf("%d", rand);return 0;
}

这个代码很简单,实现的功能就是打印rand函数的值。(这里赋值为10.并且以全局变量定义)

那我们在这个代码实现的基础上加一个头文件:

#include<stdlib.h>

也就是说:

#include<stdio.h>
#include<stdlib.h>int rand = 10;int main()
{printf("%d", rand);return 0;
}

我们看一下在编译器中运行的结果:
在这里插入图片描述
加了个头文件后,编译器报错了,这是为什么呢?

我们看报错原因:说是rand函数重定义。这是因为在库中已经有了rand这个函数,如果再次使用rand这个名字定义变量或者函数时,编译器会分不清你到底想使用哪个rand,因而报错。

那么如何解决这个问题呢?
这就是我们要首先介绍的命名空间

C++为了解决C语言上述的问题
引出了命名空间这种玩法
(C++兼容C语言的所有语法)

命名空间定义:

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

 //NIC是命名空间的名字,一般开发中是用项目名字做命名空间名。
namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};
}

命名空间相当于一个独立的作用域
命名空间中所有内容都局限于该命名空间中

在这里插入图片描述

当然,命名空间也可以嵌套:

namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};//命名空间的嵌套:namespace NIC2{int a;int b;int sum(int x, int y){return x + y;}struct Student{int ID;char Name[20];};}
}

命名空间的使用:

那么我们回到我们最初的那个问题,既然我们现在知道了是函数冲突产生的问题,并且用命名空间解决,那么如何使用呢?

先看下面代码示例:

int main()
{printf("%d", NIC::rand);return 0;
}

我们刚才把rand函数包装在了我们的命名空间里,这里我们要打印rand的值,采用了命名空间名+::的形式,这就是使用命名空间的第一种方法:加命名空间名称及作用域限定符。

方法一:加命名空间名称及作用域限定符(不展开命名空间)

:: 域作用限定符。
通过域作用符我们就可以访问命名空间中的成员:

int main()
{printf("%d\n", NIC::rand);int b = NIC::Add(1, 3);printf("%d", b);struct NIC::Test node;return 0;
}

结果显示:
在这里插入图片描述

这个代码示例我们访问了我们命名空间里面的rand和Add函数。最后一个我们开辟了结构体的新节点。

方法二:使用using将命名空间中某个成员引入(展开空间中部分内容)

假设NIC空间中的rand使用频率很高
可以将rand变量单独展开到全局域

using NIC::rand;

假设NIC空间中的Add函数使用频率很高
可以将Add函数单独展开到全局域

using NIC::Add;

看一下测试代码:

using  NIC::rand;
int main()
{int b = rand;//rand展开直接用int c = NIC::Add(3, 5);//Add没有展开,需要用域作用符::访问printf("%d\n%d", b, c);return 0;
}

结果如下:
在这里插入图片描述

方法三:使用using namespace 命名空间名称 引入(展开空间中全部内容)

在空间NIC后面加上

using namespace NEO;

这句话的意思是:
将空间NIC展开为全局域

我们在看C++程序时经常看见:

using namespace std;

std就是C++的标准库。

当NIC空间被展开后
空间里的所有内容可以直接使用:

namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};//命名空间的嵌套:namespace NIC2{int a;int b;int sum(int x, int y){return x + y;}struct Student{int ID;char Name[20];};}
}using namespace NIC;
int main()
{int b = rand;printf("%d", b);return 0;
}

结果如下:
在这里插入图片描述

对命名空间展开的思考

假设我们将自定义NIC空间和标准库的std空间同时展开
那么整型变量rand和rand函数同时暴露在全局域
我们再去使用它时也会报错:

using namespace std;
using namespace NIC;

所以直接展开std标准库也有冲突风险
但是不展开的话,写输入输出会很麻烦

那么平时写代码时应该怎么办?
结论:

1.写项目时,尽量不要展开标准库
2.日常练习时应该展开标准库
3.写项目使用部分常用内容展开

C++输入与输出:

C语言输入输出方式,相信大家都并不陌生,那么C++如何输入输出呢?

在C++中,输入输出用的是IO流,跟C语言一样,在使用C++输入输出前要包含一个头文件:

#include<iostream>

其次,因为输入输出函数直接在库里面,我们可以直接展开std库也可以访问std库。

using namespace std;
using std::cout
using std::cin
using std::endl

具体用什么方式应人而异,根据自己习惯选择。

cout(标准输出对象(控制台))

C++中用:cout<< 来进行打印输出。(console:控制台 out:输出)
<<:流插入运算符

using std::cout;
int main()
{cout << "hello world\n";return 0;
}

输出结果:
在这里插入图片描述

从代码示例,我们可以理解为:hello word字符串就是流,流向到对象(终端)中去,进行打印输出。

补充1:
在C语言中,根据类型不同,我们用printf函数打印的时候,需要指定格式才能打印:

int main()
{int a = 10;double b = 5.5;printf("%d %.2lf", a, b);return 0;
}

但是我们C++中,会自动识别类型:

using std::cout;
int main()
{cout << "hello world\n";int a = 10;double b = 5.5;cout << a<<"\n";cout << b;return 0;
}

输出结果:
在这里插入图片描述
不仅如此:打印的时候我们可以多次用<<流插入运算符。

using std::cout;
int main()
{cout << "hello world\n";int a = 10;double b = 5.5;cout << a<<"\n"<<b<<"\n"<<"hello world\n"<<'\n';return 0;
}

输出结果:
在这里插入图片描述
补充2:
在C++中,我们可以用endl来表示换行符。(end:结尾 Line:行)

int main()
{// IO流// 自动识别输出变量的类型// <<流插入std::cout << "hello world\n";int a = 10;double b = 11.11;//std::cout << a << "\n";//std::cout << b << "\n";std::cout << a << "\n" << b << '\n';std::cout << a << std::endl << b << std::endl;return 0;
}

输出结果:
在这里插入图片描述

cin(标准输入对象(键盘))

C++中用:cin>>来进行获取键盘输入。(console:控制台 in:里面)
<<:流提取运算符

using  std::cin;
using  std::cout;
using  std::endl;
int main()
{int a;double b;// 流提取cin >> a >> b;cout << a  << endl << b << endl;cout << a << endl << b << endl;return 0;
}

输出结果:
在这里插入图片描述

注意:关于cout和cin还有很多更复杂的用法,比如控制浮点数输出精度,控制整形输出进制格式等等。因为C++兼容C语言的用法,这些又用得不是很多,我们这里就不展开学习了。后续如果有需要,我
们可以进行网上查阅并仔细学习。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11 Qt QFutureWatcher lambda

目录 Lambda 介绍 【QT】Qt之QFutureWatcher 简述 传参&#xff1a; 还可以使用 QProgressDialog 作为阻堵 函数&#xff0c;变成同步&#xff1b; 完成后&#xff0c;关闭&#xff1b; MyQProgressDialog 效果&#xff1a; Lambda 介绍 Lambda 函数也叫匿名函数&…

MAX17058_MAX17059 STM32 iic 驱动设计

本文采用资源下载链接&#xff0c;含完整工程代码 MAX17058-MAX17059STM32iic驱动设计内含有代码、详细设计过程文档&#xff0c;实际项目中使用代码&#xff0c;稳定可靠资源-CSDN文库 简介 MAX17058/MAX17059 IC是微小的锂离子(Li )在手持和便携式设备的电池电量计。MAX170…

2562. 找出数组的串联值

2562. 找出数组的串联值 难度: 简单 来源: 每日一题 2023.10.12 给你一个下标从 0 开始的整数数组 nums 。 现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。 例如&#xff0c;15 和 49 的串联是 1549 。 nums 的 串联值 最初等于 0 。执行下述操作直到 nu…

信钰证券:汇金增持提振市场情绪 保险、银行等板块集体拉升

12日&#xff0c;两市股指盘中全线走高&#xff0c;沪指一度克复3100点&#xff0c;上证50指数涨超1%。 稳妥、银行、券商板块团体拉升&#xff0c;到发稿&#xff0c;银行板块方面&#xff0c;瑞丰银行涨约6%&#xff0c;盘中一度涨停&#xff1b;紫金银行、渝农银行、西安银…

04_学习springdoc与oauth结合_简述

文章目录 1 前言2 基本结构3 需要做的配置 简述4 需要做的配置 详述4.1 backend-api-gateway 的配置4.1.1 application.yml 4.2 backend-film 的配置4.2.1 pom.xml 引入依赖4.2.2 application.yml 的配置4.2.3 Spring Security 资源服务器的配置类 MyResourceServerConfig4.2.4…

WebRTC 系列(四、多人通话,H5、Android、iOS)

WebRTC 系列&#xff08;三、点对点通话&#xff0c;H5、Android、iOS&#xff09; 上一篇博客中&#xff0c;我们已经实现了点对点通话&#xff0c;即一对一通话&#xff0c;这一次就接着实现多人通话。多人通话的实现方式呢也有好几种方案&#xff0c;这里我简单介绍两种方案…

CentOS 安装MySQL 详细教程

参考:https://www.cnblogs.com/dotnetcrazy/p/10871352.html 参考:https://www.cnblogs.com/qiujz/p/13390811.html 参考:https://blog.csdn.net/darry1990/article/details/130419433 一、安装 一、进入安装目录 将账户切换到root账户下&#xff0c;进入local目录下 cd /usr…

初学vue,想自己找个中长期小型项目练练手,应该做什么?

前言 可以试着做一两个完整的后台管理项目后再去做其他的&#xff0c;下面推荐一些github上的vue后台管理的项目&#xff0c;可以自己选择性的练一下手 Vue2 1、iview-admin Star: 16.4k 基于 iview组件库开发的一款后台管理系统框架&#xff0c;提供了一系列的强大组件和基…

计算机网络 | 数据链路层

计算机网络 | 数据链路层 计算机网络 | 数据链路层数据链路层基本概念数据链路层功能概述 参考视频&#xff1a;王道计算机考研 计算机网络 参考书&#xff1a;《2022年计算机网络考研复习指导》 计算机网络 | 数据链路层 数据链路层基本概念 数据链路层功能概述 为网络层提…

交易履约之结算平台实践 | 京东云技术团队

导读 京东科技业务在快速发展的同时&#xff0c;产生了众多线上化资金结算的需求。传统的线下资金结算模式有着人力成本高、耗时长、多方沟通协调成本高、结算准确率低等固有缺点&#xff0c;且无法满足“风法财审”对于资金流程的管控要求&#xff0c;在此背景下金道结算平台…

Python自动化测试框架pytest的详解安装与运行

这篇文章主要为大家介绍了Python自动化测试框架pytest的简介以及安装与运行&#xff0c;有需要的朋友可以借鉴参考下希望能够有所帮助&#xff0c;祝大家多多进步 1. pytest的介绍 pytest是一个非常成熟的全功能的python测试工具&#xff0c;它主要有以下特征&#xff1a; 简…

WIN10如何搭建自己的博客

引言&#xff1a; 路线说明&#xff1a; 在CSDN&#xff0c;博客园&#xff0c;简书等平台&#xff0c;可以直接在上面发表&#xff0c;用户交互做的好&#xff0c;写的文章百度也能搜索的到&#xff0c;这样速度也是最快的&#xff0c;不费心运营啥的。缺点是比较不自由&…