namespace(上)

来源:互联网 发布:进入加密空间软件 编辑:程序博客网 时间:2024/06/09 16:23
名称空间笔记(上)
Namespace 剖析------jiese1990

         namespace,我有见过两种翻译“名称空间”和“命名空间”!这里我们姑且用“名称空间”;

        依稀记得c++的第一课讲的就是namespace的使用!c++学了两年了,一直以来,都在用别人定义好的namespace,很少定义过自己的namespace!于是昨天花了些时间,看了看namespace的知识点!记下了这篇笔记!如果你能很轻松愉快的把笔记后的练习完成,那么,建议不要浪费时间,看这篇笔记(下面的东西都是基础的东西)!

 

定义名称空间
方法一:申明和定义放在一起

namespace jiese{int j;void PrintText(char *text){printf(text);}}


该方法只适合,用在cpp文件里;
在头文件里就适合这样定义名称空间,因为我们在名称空间里不仅仅是申明了变量j,还定义了变量j,而且定义了函数!若放在头文件里,当多次包含该头文件时(在多个cpp文件里#include “ “),会报“重定义;多次初始化“错!
这点与我们不在h文件中不放类的定义,只放申明,还有函数也不在头文件定义,是一个道理!(其深层原理就不再解释,如果这点还不清楚的话,那么就需要恶补下c++了)
方法二:名称空间里的数据结构,的声明和定义完全分开!
申明:
namespace jiese{extern int j;void PrintText( char * text);class CTextClass{public:int m_no;CTextClass();};}



定义:

定义1

namespace jiese{int j=0;void PrintText( char * text){printf(text);}CTextClass::CTextClass(){this->m_no=-1;}}



也可以如下定义,与上面等价
(如果,名称空间申明是在一个头文件里,要将该头文件#include)

定义2

using namespace jiese;CTextClass::CTextClass(){this->m_no=-1;}void jiese::PrintText(char * text){printf(text);printf("wai");}//变量的定义不能像函数那样定义!必须如下namespace jiese{int j=0;}
名称空间是开放的,可以随时在名称空间里添加名称!
但,在同一个名称空间里不能有同名的名称!
如:
情况一:在A.h文件里
namespace A{int j=0;}



在B.cpp里

namespace A{int j=0;}



“情况一”下,会报“重定义;多次初始化“错!同理于我们在不同文件里定义同名的全局变量,报错!

名称空间,我的理解是,在没有名称空间机制之前,我们只有一个名称空间就是一个默认的名称空间!我们的数据的声明定义,都是在同一个默认的名称空间里!当有了名称空间机制之后我们不仅仅有一个默认的名称空间,还可以定义自己的名称空间!在不同的名称空间里的名称(数据名称,和函数名称等)互不干扰!

练习:
OK,有了上面的基础,那么下面程序输出的结果是什么?

//程序namespace jiese1{int j=1;}char j='A';int _tmain(int argc, _TCHAR* argv[]){using namespace std;cout<<j<<endl;double j=-1.009;using namespace jiese1;cout<<jiese1::j<<endl;cout<<j<<endl;{using namespace jiese1;float j=250;cout<<j;}return 0;}



你知道答案吗????下篇为您揭晓答案!

原创粉丝点击