在C语言中,我们学过结构体,枚举,联合,他们其实就是一种命名空间,这些名称声明了一个数据的组织形式,并把他们放在一个独立的空间中。
struct A { int a; float b; char ar[]; };//结构体声明
union U {double a; int m;};//联合声明
enum A {int a; char b;};//枚举声明
在一个工程中,结构名和联合名是不允许相同的,但是结构名可以和结构变量相同
eg: struct A { int a; float b; char ar[]; } A;
struct A { int A; };//错误
在c++中 我们了解到了一种新的命名空间 namespace它允许程序员建造自己的名称空间
namespace NName
{
int fun(int &);//函数原型说明
int stu; int * stu;//自定义变量
class Nname {int fun1 (); double b;};//类类型声明
.......
}//***花括号之后不以分号结束***并且其中声明的变量为全局变量,也可以为变量赋合适的初始值
其中这些名称具有隐约名称和全限定名称(在空间外部需要索引全限定名,空间内部直接隐约名即可)
隐约: stu, b,
全限定:NName::stu, NName::b,
namespace NName
{
struct {long f();long m_1;};//声明类型结构 名为CType
typedef long type; //声明一个long的别名type
type funct (CType&); //声明一个函数
long CType::f() //成员函数的体内定义
{
return m_1;
}
CType* p; // 全局指针
type v; //全局变量
CType o; //全局对象
}
NName::type NName::funct(CType& r)//全局函数的体外定义
{
r.m_1 = 10;
type n = r.m_1 + 10;
return n;
}
在主函数中可以这样访问:
NName::p = &NName::o;
NName::v = NName::funct(NName::o);
在学习了using之后这一切变得简单了
使用using namespace NName之后,空间名称NName里的任意名称都可以直接索引,无需空间作用限制符 ::