首页 > 代码库 > 名空间(第二篇)

名空间(第二篇)

2017/2/24  5:50开始        有一个问题待解决。

解决名称冲突,怎么解决?         是规定作用域?提醒有人用了该名字?

不不不,今天让我们来看看  名空间(namespace):

它规定,如果你想默认使用一个名称,就要在使用域中明确声明其使用的  “空间名”。

例子,

  如我们使用的cout, 要不

//1.
using namespace std;//放在外部和内部都可以,
//但是放在内部时记住,先说明后使用,顺序不能错。
cout<<"EX1.\n";
//2
std::cout<<"EX1.\n";//(只要有#include<iostream>就可以用)
//这种用法最麻烦,但是也是最安全的写法,我当然希望,
//合理的灵活来减小工作量。
//3
using std::cout;//为了某几个名字重了时,其他的还可以随便使用
cout<<"EX1.\n";(注意项 和 1 基本一样)

三种方法记清了!!!

上述三个例子,很好地说明了名空间的部分使用格式

 

名空间更加近似于自然语言:

举两个栗子:

  1.我高中的外号叫“东东”,但是可能我们学校里外号叫 东东 的多了,那么别人怎么确认是我呢?

      方法一:说   我说的人都是二十五班的,然后你再说东东,大家都知道说的是我了,因为这个班里只有我一个东东。

          类似于: using namespace std;

      方法二:说   等下我说的是 二十五班的那个东东,然后你再说东东,大家都知道说的是我了。

          类似于: using std::cout;

      方法三:每次说到我时,都说 二十五班的那个东东,虽然不自然又麻烦,但是表意明确。

          类似于: std::cout<<"DongDong\n";

 

感悟:所以啊,关于语言,其实很多解决方法就在我们自然语言中,自然语言流行至今,早已解决了此类问题,所以学会从自然语言中找答案。

 

由于头文件是凌驾于其他程序文件之上的,是其他程序文件中的所有外部名称(非 函数局部名称)的使用规范描述。

 

使用规则:(尝试下。。。)

出现了错误!!!

[Error] call of overloaded ‘f()‘ is ambiguous遇到这种问题怎么办?复制错误上网搜。

我知道发生什么了。。。。

其实先看英文,他说你调用函数模糊不清

然后你发现了错误在于两个相同的函数名,

第一个用 using namespace ...;

第二个必须用   ... :: ....;

不信你试试。。。

果然,

所以如下;

//1.hpp
namespace print1{
    void f();
}
namespace print2{
    void f();
}
//2.hpp
#include<iostream>
#include"1.hpp"
void print1::f(){
    std::cout<<"I Love U.\n";
}
void print2::f(){
    std::cout<<"I Want U.\n";
}
#include<iostream>
#include"2.hpp"
using namespace print1;
int main(){
    f();
    print2::f();
} 

所以啊,原来是小问题,吓坏我了。

或者以后这种情况也可以用{},减小影响范围,

直接把using namespace 。。。放在外面还是不好的

 

注意,一个用于声明,里面的函数也是声明格式;  一个用于定义,定义格式,记住加上它们的前缀;  再一个就是使用它们的函数;

 

接下来便是组织模块的地方了:

说实话,我不希望它是虚的东西。

 

对一个模块,其输入:其他模块提供的服务;  其输出:提供给其他模块的服务(或界面)

就可以把你要的一切头文件组织在一个头文件中

而且你的模块有结构层次,

 我们先看看一个例子,然后想想如何实现?

技术分享

还算清晰,

不太懂

 

 

留一个疑问:大概理解组织模块了,如何具体实现?

      需要把前面的头文件看了再说,所以现在还不是时候。

                   还有数据封装是什么?(对数据重复的解决方法)

 

用法注意,来两个例子:

  

#include<iostream>
#include<cmath>
using std::cout;
using std::endl;
int abs(int a){
    return a > 0 ? a : -a;
}
int main(){
    cout<<abs(-5)<<endl<<std::abs(-5)<<endl<<std::abs(-5.00)<<endl;
} 

 

#include<iostream>
#include<cmath>//abs属于其中 
int abs(int a){
    return a > 0 ? a : -a;
    //别忘了问号表达式 
}
int main(){
    std::cout<<abs(-5)<<std::endl<<std::abs(-5)<<std::endl<<std::abs(-5.00)<<std::endl;
    //endl表示换行,别忘了std:: 
} 
//你想到了接下来看什么了吗?
//首先,
//1.cmath里常用对象 

cout也基本会用了233333

名空间(第二篇)