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;}
你知道答案吗????下篇为您揭晓答案!
- namespace(上)
- Docker基础技术:Linux Namespace【上】
- Docker基础技术:Linux Namespace(上)
- Docker基础技术:Linux Namespace(上)
- Docker基础技术:Linux Namespace(上)
- Docker基础技术:Linux Namespace(上)
- Docker 基础技术:Linux Namespace(上)
- NAMESPACE
- namespace
- namespace
- namespace
- namespace
- namespace
- namespace
- namespace
- Namespace
- namespace
- namespace
- servlet的生命周期 工作原理
- asp.net2.0 GrdView自带分页实现 详解
- 设计的四大基本原则
- 财务上的大写数字从1到10分别是?
- ubuntu右键添加终端
- namespace(上)
- iMCU7100EVB用户指南(一)
- 给电脑提速
- vi/vim 使用方法讲解
- webkt内核和gecko内核比较
- Wireshark使用方法(学习笔记一)
- Hibernate环境搭建续----工具类
- iPhone模拟器里面模拟两个手指做放大缩小的手势
- BusinessObject 常见问题及解决方法