首页 > 代码库 > 名空间(第二篇)
名空间(第二篇)
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
名空间(第二篇)