各位朋友们,欢迎来到本期博文 !
从今天开始,C++ 之旅已经奏响!内心澎湃激动呀 !😊
在这之前,需要先声明一下 !本期博文,不会介绍 C++ 发展史 ! 以及一些小儿科的东西 !
那些,了解一下就行了 !没必要在这里展述 !部分博文纯属是凑字数 !没多大的意义 !
-------> 命名空间
在 C / C++ 中,变量,函数以及后面要学到的类都是大量存在的,这些变量,函数和类名称都存在于 全局作用域,这就有可能导致许多的冲突!
举一个例子,一个小小的项目,平均两三万行代码 !每一名程序员,会写出一部分。
当汇总之后,如果不存在命名空间的话,相同的名称之间,就会产生大量的冲突 !当然了,还有个人书写的代码,要避免同库内的一些函数名称发生冲突 !
使用命名空间,对标识符进行本地化,以避免命名冲突或者名字污染 ! namespace 就此登上了历史的舞台 !
在这里,讲述一下,什么是全局作用域 ?
----> 创建成功一个项目之后,展现在面前的文本编译器的界面(即 代码书写框)
由于本章节,知识点及其运用比较简单 !就不在这里 手动书写代码了 !下面一律采用 彩色代码图样 !😊
上述报错,是由于定义的 “rand” 同库内的 rand() 函数,发生了同名,进而产生了冲突 !
那么,解决方案是什么呢 ?
-----> 用命名空间进行封装
上述代码 ,符号 “ ::” 叫做 域作用限定域
显然,命名空间标识符 “ namespace ” 也叫做 命名空间域 !进而,思考来了 !既然又出现了一个域叫做 命名空间域 。那么,同 全局域,局部域 相比较,三者之间的优先级谁更高一些呢?
由于 C 语言的学习,很早的时候,已经得知,局部域 优先于 全局域 !那么,空间限定域 同这二者之间的优先级相对大小如何呢 ?
下面是探索结果 :>
----->局部域 用 命名空间域 进行比较
-----> 全局域 用 命名空间域 进行比较
哈 !各位朋友,上述运行结果,显然无关于 空间域啥事情 ?
难道说,命名空间域的优先级是最小的吗 ?😊
其实,这种说法,是错误的 !打印出命名空间域内的变量值,需要用到 域作用限定域 (“ :: ”)
以上两种比较,均是不合理的 !只能说,命名空间域同另外两者无法比较 !
现解释这种情况 :>
请注意,命名空间 这“空间”二字,既然是空间,那么显然是封闭的 !那么该如何从外部将其打开呢 ?这需要用到刚刚讲述过的 域作用限定域 (“ ::”)
请看下列图示 :>
上述代码中,“apple” 是给这个空间的名字 !当出现较多命名空间的时候,从而可以指定访问,某一个空间内的成员变量 !
如下所示 :>
-----> 命名空间嵌套
-----> 域作用限定域 ---> 提升 全局变量 优先级
此外,还有一点,同名命名空间出现在不同的文件下,会被整合到一起 !
如下 :>
-----> “Test.h”
-----> “Test.cpp”
请注意上述代码的提示部分 :>
同名命名空间不能在同一个源文件下,即另一个项目中的 “.cpp” 文件中重复出现,如重复出现,仍然有冲突 !
下面,开始讲解有正式味道的 C++ !
那么,谈及什么是 “正式味道的 C++” !先来说明一下, C++ 可以兼容 C 语言 ! C++ 是支持 C 语言语法的!
C++ 建立的初衷---> 弥补 C 语言上的缺陷 !也是说, C++ 比 C 语言更加灵活 !功能更加强大 !
其实,C++学习,刚刚起步 !一些小知识点,还是要提及一下的 !
比如, 流插入运算符(“ << ”) 流提取运算符(“ >> ”)
请注意看,上述的代码图样,注意红色框框 !显然出现了 C 语言没有的新事物 !
头文件 <iostream>
(1.)在 C++ 中, 使用 cout 标准输出对象(控制台)和 cin 标准输入对象(键盘)时,必须包含 <iostream>
头文件,以及按命名空间使用方法来使用 std !
(2.)cout 和 cin 是全局的流对象, endl 是特殊的 C++ 符号(注意,“endl” 最后一个是字母 “l” ),表示换行输出,全都包含在 <iostream> 头文件当中 !
在上述描述中,出现了 命名空间域 std
如下所示 :>
----> 什么是 std , std 指代什么 ?
显然,命名空间 std 是非常大的,还有各式各样的元素,变量函数,库类型等等
在 C++ 运用中,最常用的还是 C++ 标准库,而标准库之下,又出现了 STL ,C++库, 模板等等 !!因此,std 涵盖了日常用到的所有必需品 !!
“ using xxx” 显然是将某一个空间进行了展开 !而上述代码中,显然是将 std 内的所有成员都暴露在了全局域当中了 !而这种全部暴露的写法是相当危险的 ! 因此只可做日常练习使用!绝对不推荐,在项目书写时,用这种全部暴露的写法 !!否则,几万行甚至上百万行的代码,会出现数不尽的冲突 !
那么该如何解决这个 “难题”呢 😊 显然,先人们,给出了最佳解决方案 :> 指定展开常用的
因此,调用 “ cout ” 与 “ endl ”, 还可以写成 如下形式 :>
其实还有一种写法,极不推荐 !在这里摞列出来,仅供参考了解 : >
此种写法是在每条 输出流, 换行流之前加上 std !哈!😊如果不是脑袋抽筋,谁会这么没事找事干呢 !这可是做了大量的无用功呢 !!极其没有效率可言 !!仅供参考一下,了解一下 !!
下面的代码,请注意,红色框框 !显然,加了一个 “const” 常变量 !
原因是 字符串首字母代表着首地址 !要遍历打印出完整的字符串,需要用到指针,毕竟指针可以指向地址嘛 !而字符串显然是 “char”类型 !又因为 char* 类型不能初始化常变量类型 !因此必须结合 const 才可以 !
其实,上述的改写 !纯正的 C++味道 !!不知朋友们,可否还品味到另一种香呢 ?
请注意,分析,打印出来的元素 !!那可是有多种不同类型的元素啊 !
哈 😊 现在接触到香了吗?
-----> “ cout ” --->自动识别类型
如此,避免了,运用 C 语言时候,特意加上 不同种类元素 所对应的类型了 !!
是不是特别香呢 ?哈 😊 其实以后还有更香的 !!敬请期待,接下来的博文哦 !!
这里,还想再讲解,另一个 自动识别类型 运算符 ---> cin
-----> “ cin ” 流提取运算符
如下 :>
请注意看,红色框框 !! 从上述代码中,可以得知,流提取运算符是会自动识别类型的,以及重要的一点不完美
默认保留小数点后一位,不是很方便进行修改 !!如果不相信的话,可以手动搜索下,这方面的知识点 !!
最高效的做法,相信也是绝大多数朋友选择的一种方式 !用 C 语言保留小数位的方法 !这是最便捷,也是最惹人喜爱的一种方式 !😊😊
毕竟 C++兼容 C 语言嘛 !!两种语言结合,这一小点儿 C++不完美的地方,就此忽略,从而变得更香了 !
至此,本期的讲解已完毕 !希望本期内容,能对老友们有所帮助 !!
下一期,讲解 C++ 缺省参数,函数重载,及其部分引用 !!这可是一份营养套餐 !!至少就目前而言,引用 在以后的很长一段时间内,需要大量进行反复运用 !!
另外,还需要指明一下 !对于上一期,二叉树之堆之构建_02 存在一些小毛病 !希望老友们,可以谅解 !那篇博文,足足写了三天的时间,将近二十个小时才完工的 !那些小毛病,想必是,当时的头脑昏胀 !疏忽了一些小细节!总体而言,逻辑思路,代码风格和质量上没有任何问题 !!可以放心学习和浏览 !!😊😊
欢迎各位好友,踊跃指正和发言 !!愿共同进步 !!敬请期待下一篇的来临 !!😊😊