C++学习笔记
1.Namespaces 命名空间
把逻辑上相关联的东西放在一起,用namespaces 给他起一个名字 ??? 名字后面没有分号,名字(函数、数据等)叫这个名字空间的成员
实现namespace 是实现接口与实现分离的关键。
我们用标准的c++ 的 std; 这是using 指令
使用命名空间,实现模块化程序设计,实现接口与实现的分离。 (我只需要关注接口,而不需要关注实现)
C++ 允许为一个namespace 声明多个同名的namespace 接口 ,但是实际操作中,我们并不会这样去实现,而是用一个不同的名字,但是内部的实现相同 这就是namespace 面对不同的用户,不同的使用者的一般做法.
namespace parser {
double expr (bool) ; // 非定义声明
double prim (bool get) {/* */}
}
namespace parser {
double prim (bool);
}
double parser :: prim (bool get) {
// 具体实现
}
:: 表示约束符
- 声明 定义性声明,非定义性声明 、
2.编译过程
- compile 源文件 —— 目标文件
- build 目标文件 —— 可执行文件
run 执行 exe
接口 (外界可以看到的成语只要能看到就可以)
所有命名空间中的非定义声明,接口应该与实现相分离 (也可以不分离,但是一般会分离)
使用约束符 :: 来确定约束的函数的命名空间,约束符有自己的作用域和函数的作用域一样。
4.using 声明
在成员的实现内,对特定的namespace 的特定成员使用 using 声明,约束范围在该 namespace 的所有实现之内. 注意using 的作用域就好了
出现在两种位置
- namespace 接口中
- 函数定义中
`using function :: prim(bool);
5.using 指令
using namespace error; 使用完 using 指令之后,在其作用域内,都是使用这个名字空间中的成员
出现的位置 :
- 函数的定义中
- namespace 接口中 (所有使用该 namespace 中命名都在使用的命名空间中找)
6.总结
- namespace 引入了成员和接口的概念
- 接口和非定义性声明的异同