当前位置: 首页 > news >正文

C++入门(namespace/输入输出)

C++入门

  • 一.C++起源
  • 二.C++的第一个程序
  • 三.命名空间(namespace)
    • 一、什么是namespace?
    • 二、namespace的价值
    • 三.namespace的定义
    • 四.命名空间的使用
  • 四.C++的输入与输出
  • 总结

在这里插入图片描述

一.C++起源

  1. 发展历程:
    C++ 由美国 AT&T 贝尔实验室的本贾尼・斯特劳斯特卢普博士在 20 世纪 80 年代初开发。它最初被称为 “C with Classes”,后来逐渐发展成为一种独立的编程语言,并在 1985 年正式定名为 C++。C++ 是在 C 语言的基础上进行了扩展和改进,保留了 C 语言的高效性和底层控制能力,同时增加了面向对象编程的特性。
  2. 语言特点:
  • 高效性
    C++的高效性是众所周知的。C++直接操作硬件资源,能够实现高效的内存管理和高性能计算。这使得它在需要高性能的应用场景中表现出色,例如游戏引擎和实时系统。
  • 面向对象
    C++ 支持面向对象编程,这意味着它将数据和操作数据的方法封装在类中,通过创建类的对象来实现对数据的操作和管理。这种编程方式使得代码更易于维护、扩展和复用。
  • 兼容性:
    C++ 与 C 语言有着良好的兼容性,许多 C 语言的代码可以在 C++ 环境中直接编译和运行。

废话不多说,直接开始技术介绍部分。

二.C++的第一个程序

第一个程序也是老朋友hello world.

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

以上程序作为C++模板,基本上日后绝大部分C++程序都可以看得到。
以上内容依旧涉及太多知识盲区,下面将对其逐步解释。

三.命名空间(namespace)

一、什么是namespace?

namespace是一种逻辑上的分区,用于将标识符(如变量名、函数名、类名等)分组。通过命名空间,可以将不同的标识符放在不同的作用域中,从而避免命名冲突。简单来说,namespace就像一个容器,将相关的代码封装在一起。
例如:

namespace MyNamespace {int a = 1;int b = 2;
}

以上例子namespace就是一个命名空间,其中包含着a,b变量。
• C++标准库都放在⼀个叫std(standard)的命名空间中。

using namespace std;

上述代码所使用到的cout的函数,就是包括在std这个命名空间当中。

二、namespace的价值

  • 避免命名冲突
    在大型项目中,代码可能由多个开发者编写,或者使用了多个第三方库。这些代码中可能会出现相同的标识符名称,从而导致冲突。namespace通过为标识符提供一个唯一的上下文,有效避免了这种冲突。

三.namespace的定义

  1. 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。

  2. namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量。

  3. C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

  4. namespace只能定义在全局,当然他还可以嵌套定义

  5. 项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。

  6. 命名空间的别名
    如果某个命名空间的名称较长,可以为其定义一个别名,以简化代码。
    namespace MY = mynamespace

四.命名空间的使用

编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。
所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:

  1. 指定命名空间访问,项⽬中推荐这种⽅式。
namespace N
{int a = 0;int b = 1;
}int main()
{printf("%d\n", N::a);return 0; 
}

在未展开命名空间的情况下,可以用 ::来对命名空间内的变量进行访问。
如上述代码,在:: 前加上命名空间,后面跟上命名空间的所属变量,就可以对其进行访问。

  1. using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。
// using将命名空间中某个成员展开 using N::b;int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0; 
}

在全局中,可以只展开命名空间中的其中一个变量。如上述,将命名空间中的b展开后,下面可以直接对b进行输出。

  1. 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。
// 展开命名空间中全部成员 using namespce N;int main()
{printf("%d\n", a);printf("%d\n", b);return 0; 
}

通过using 可以将整个命名空间展开,展开后可以直接对命名空间中的变量进行使用。using namespace std;也同理是将C++本身所含的标准库当中的函数展开了。

四.C++的输入与输出

在C++的第一个代码中,我们可以看到cout 这个符号,这是C++中的输出函数。
下面将进行详细说明。

  1. 是Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输出对象。
    • std::cin是 istream类的对象,它主要⾯向窄字符
    (narrow characters(of type char))的标准输⼊流。
    • std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
    • std::endl 是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区。
    • <<是流插⼊运算符,>>是流提取运算符。(C语⾔还⽤这两个运算符做位运算左移/右移)
  2. 自动识别变量类型
    使⽤C++输⼊输出更⽅便,不需要像printf/scanf输⼊输出时那样,需要⼿动指定格式,C++的输⼊输出可以⾃动识别变量类型,其实最重要的是C++的流能更好的⽀持⾃定义类型对象的输⼊输出。
  3. std库
    • cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要通过命名空间的使⽤⽅式去⽤他们。
    • 这⾥我们没有包含<stdio.h>,也可以使⽤printf和scanf,在包含间接包含了。(此条取决于编译器类型)

总结

此章作为C++的入门博客,主要在介绍C++的第一个程序中所涉及到的知识。
主要有命名空间和输入输出两个方面,当然这里介绍的还是太片面了些,在日后学习中还会完善。

相关文章:

  • docker存储
  • 23.C语言指针相关知识点2
  • C++代码随想录刷题知识分享-----面试题链表相交
  • 传统农耕展陈如何突破?数字多媒体能否重构文化体验边界?
  • 阿里云ftp服务器登录要怎么做?如何访问ftp服务器?
  • 记录一下QA(from deepseek)
  • 开发vue项目所需要安装的依赖包
  • Redis ⑦-set | Zset
  • Leetcode刷题 | Day49_图论01
  • 《冰雪传奇点卡版》:详细打金攻略!
  • OpenGL学习笔记(法线贴图、视差贴图)
  • 基于 Spring Boot 瑞吉外卖系统开发(九)
  • 读论文《Deep learning-assited pulsed discharge plasma catalysis modeling》2023 ECM
  • 在QGraphicsView中精确地以鼠标为锚缩放图片
  • 【Light文献速览】湖南大学超表面高阶庞加莱球偏振检测时钟技术突破
  • EMC isilon/PowerScale 如何收集日志
  • 【神经网络与深度学习】五折交叉验证(5-Fold Cross-Validation)
  • 数据结构 RBT 插入操作的 Python 代码实现
  • 设计模式(行为型)解释器模式
  • 如何免费把PPT的页面输出为透明的图片-快速制作图新说汇报内容
  • 新造古镇丨上海古镇朱家角一年接待164万境外游客,凭啥?
  • 周口一乡镇公务员“被老赖”,两年4场官司均败诉,市监局将线索移送公安厅
  • 第二十届中国电影华表奖揭晓!完整获奖名单来了
  • 公交公司须关注新出行需求:“单车巴士”能否常态化
  • 特朗普将举行集会庆祝重返白宫执政百日,美媒:时机不当
  • “十四五”以来少数民族发展资金累计下达边疆省区252亿元