0
点赞
收藏
分享

微信扫一扫

初写 -----> C++ ---> 入门_01

各位朋友们,欢迎来到本期博文 !

从今天开始,C++ 之旅已经奏响!内心澎湃激动呀 !😊

在这之前,需要先声明一下 !本期博文,不会介绍 C++ 发展史 ! 以及一些小儿科的东西 !

那些,了解一下就行了 !没必要在这里展述 !部分博文纯属是凑字数 !没多大的意义 !

-------> 命名空间

在 C / C++ 中,变量,函数以及后面要学到的类都是大量存在的,这些变量,函数和类名称都存在于 全局作用域,这就有可能导致许多的冲突!

举一个例子,一个小小的项目,平均两三万行代码 !每一名程序员,会写出一部分。

当汇总之后,如果不存在命名空间的话,相同的名称之间,就会产生大量的冲突 !当然了,还有个人书写的代码,要避免同库内的一些函数名称发生冲突 !

使用命名空间,对标识符进行本地化,以避免命名冲突或者名字污染 ! namespace 就此登上了历史的舞台 !

在这里,讲述一下,什么是全局作用域 ?

----> 创建成功一个项目之后,展现在面前的文本编译器的界面(即 代码书写框)

由于本章节,知识点及其运用比较简单 !就不在这里 手动书写代码了 !下面一律采用 彩色代码图样 !😊

初写 -----> C++ ---> 入门_01_流提取运算符

上述报错,是由于定义的  “rand”  同库内的 rand() 函数,发生了同名,进而产生了冲突 !

那么,解决方案是什么呢 ?

-----> 用命名空间进行封装

初写 -----> C++ ---> 入门_01_指定访问命名空间_02

上述代码 ,符号  “ ::” 叫做 域作用限定域

显然,命名空间标识符  “ namespace ” 也叫做 命名空间域 !进而,思考来了 !既然又出现了一个域叫做 命名空间域 。那么,同 全局域,局部域 相比较,三者之间的优先级谁更高一些呢? 

由于 C 语言的学习,很早的时候,已经得知,局部域 优先于 全局域 !那么,空间限定域 同这二者之间的优先级相对大小如何呢 ?

下面是探索结果 :>

----->局部域 用 命名空间域 进行比较

初写 -----> C++ ---> 入门_01_自动识别类型符_03


-----> 全局域 用 命名空间域 进行比较

初写 -----> C++ ---> 入门_01_指定访问命名空间_04


哈 !各位朋友,上述运行结果,显然无关于 空间域啥事情 ?

难道说,命名空间域的优先级是最小的吗 ?😊

其实,这种说法,是错误的 !打印出命名空间域内的变量值,需要用到 域作用限定域 (“  :: ”)

以上两种比较,均是不合理的 !只能说,命名空间域同另外两者无法比较 !

现解释这种情况 :>

请注意,命名空间 这“空间”二字,既然是空间,那么显然是封闭的 !那么该如何从外部将其打开呢 ?这需要用到刚刚讲述过的 域作用限定域 (“ ::”)

请看下列图示 :>

初写 -----> C++ ---> 入门_01_流提取运算符_05

上述代码中,“apple” 是给这个空间的名字 !当出现较多命名空间的时候,从而可以指定访问,某一个空间内的成员变量 !

如下所示 :>

-----> 命名空间嵌套

初写 -----> C++ ---> 入门_01_自动识别类型符_06


-----> 域作用限定域 ---> 提升 全局变量 优先级

初写 -----> C++ ---> 入门_01_命名空间_07

此外,还有一点,同名命名空间出现在不同的文件下,会被整合到一起  !

如下 :>

-----> “Test.h”

初写 -----> C++ ---> 入门_01_指定访问命名空间_08


-----> “Test.cpp”

初写 -----> C++ ---> 入门_01_流输出运算符_09

请注意上述代码的提示部分 :>

同名命名空间不能在同一个源文件下,即另一个项目中的 “.cpp” 文件中重复出现,如重复出现,仍然有冲突 !

下面,开始讲解有正式味道的 C++ !

那么,谈及什么是 “正式味道的 C++” !先来说明一下, C++ 可以兼容 C 语言 ! C++ 是支持 C 语言语法的!

 C++ 建立的初衷---> 弥补 C 语言上的缺陷 !也是说, C++ 比 C 语言更加灵活 !功能更加强大 !

其实,C++学习,刚刚起步 !一些小知识点,还是要提及一下的 !

比如,  流插入运算符(“ << ”)   流提取运算符(“ >> ”)

初写 -----> C++ ---> 入门_01_流提取运算符_10


请注意看,上述的代码图样,注意红色框框 !显然出现了 C 语言没有的新事物 !

头文件 <iostream>

(1.)在 C++ 中, 使用 cout 标准输出对象(控制台)和 cin 标准输入对象(键盘)时,必须包含 <iostream>

头文件,以及按命名空间使用方法来使用 std !

(2.)cout 和 cin 是全局的流对象, endl 是特殊的 C++ 符号(注意,“endl” 最后一个是字母 “l” ),表示换行输出,全都包含在 <iostream> 头文件当中 !

在上述描述中,出现了 命名空间域 std

如下所示 :>

----> 什么是 std , std 指代什么 ?

初写 -----> C++ ---> 入门_01_流输出运算符_11

显然,命名空间 std 是非常大的,还有各式各样的元素,变量函数,库类型等等

在 C++ 运用中,最常用的还是 C++ 标准库,而标准库之下,又出现了 STL ,C++库, 模板等等 !!因此,std 涵盖了日常用到的所有必需品 !!

 “ using xxx”  显然是将某一个空间进行了展开 !而上述代码中,显然是将 std 内的所有成员都暴露在了全局域当中了 !而这种全部暴露的写法是相当危险的 ! 因此只可做日常练习使用!绝对不推荐,在项目书写时,用这种全部暴露的写法 !!否则,几万行甚至上百万行的代码,会出现数不尽的冲突 !

那么该如何解决这个 “难题”呢 😊 显然,先人们,给出了最佳解决方案 :> 指定展开常用的

因此,调用  “ cout ” 与 “ endl ”, 还可以写成 如下形式 :>

初写 -----> C++ ---> 入门_01_命名空间_12

其实还有一种写法,极不推荐 !在这里摞列出来,仅供参考了解 : >

初写 -----> C++ ---> 入门_01_自动识别类型符_13

此种写法是在每条 输出流, 换行流之前加上 std !哈!😊如果不是脑袋抽筋,谁会这么没事找事干呢 !这可是做了大量的无用功呢 !!极其没有效率可言 !!仅供参考一下,了解一下 !!

下面的代码,请注意,红色框框 !显然,加了一个 “const” 常变量 !

原因是 字符串首字母代表着首地址 !要遍历打印出完整的字符串,需要用到指针,毕竟指针可以指向地址嘛 !而字符串显然是 “char”类型 !又因为 char* 类型不能初始化常变量类型 !因此必须结合 const 才可以 !

初写 -----> C++ ---> 入门_01_自动识别类型符_14

初写 -----> C++ ---> 入门_01_流输出运算符_15

其实,上述的改写 !纯正的 C++味道 !!不知朋友们,可否还品味到另一种呢 ?

请注意,分析,打印出来的元素 !!那可是有多种不同类型的元素啊 !

哈 😊 现在接触到了吗?

-----> “ cout ” --->自动识别类型

如此,避免了,运用 C 语言时候,特意加上 不同种类元素 所对应的类型了 !!

是不是特别香呢  ?哈 😊 其实以后还有更香的 !!敬请期待,接下来的博文哦 !!

这里,还想再讲解,另一个 自动识别类型 运算符 ---> cin


-----> “ cin ” 流提取运算符

如下 :>

初写 -----> C++ ---> 入门_01_流输出运算符_16

请注意看,红色框框 !! 从上述代码中,可以得知,流提取运算符是会自动识别类型的,以及重要的一点不完美

默认保留小数点后一位,不是很方便进行修改 !!如果不相信的话,可以手动搜索下,这方面的知识点 !!

最高效的做法,相信也是绝大多数朋友选择的一种方式 !用 C 语言保留小数位的方法 !这是最便捷,也是最惹人喜爱的一种方式 !😊😊

毕竟 C++兼容 C 语言嘛 !!两种语言结合,这一小点儿 C++不完美的地方,就此忽略,从而变得更香了 !

至此,本期的讲解已完毕 !希望本期内容,能对老友们有所帮助 !!

下一期,讲解 C++ 缺省参数,函数重载,及其部分引用 !!这可是一份营养套餐 !!至少就目前而言,引用 在以后的很长一段时间内,需要大量进行反复运用 !!

另外,还需要指明一下 !对于上一期,二叉树之堆之构建_02 存在一些小毛病 !希望老友们,可以谅解 !那篇博文,足足写了三天的时间,将近二十个小时才完工的 !那些小毛病,想必是,当时的头脑昏胀 !疏忽了一些小细节!总体而言,逻辑思路,代码风格和质量上没有任何问题 !!可以放心学习和浏览 !!😊😊

欢迎各位好友,踊跃指正和发言 !!愿共同进步 !!敬请期待下一篇的来临 !!😊😊


举报

相关推荐

0 条评论