namespace(上)

名称空间笔记(上)
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;
}



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

猜你喜欢

转载自blog.csdn.net/jiese1990/article/details/7643940
今日推荐