在C++编程中,变量和函数等的作用范围是有限制的,在函数内定义的变量就不可以在函数外使用。引入名空间(namespace)可解决变量和函数的作用范围。
在一个名空间中可以定义一组变量和函数,这些变量和函数的作用范围是一样的,可以将这些变量和函数称为这个名空间的成员。
通过名空间,可以在一个文件中使用相同的变量名或函数名,前提条件是它们属于不同的名空间。名空间可以使得代码操作具有相同名字但属于不同库的变量,而且,名空间也可以提高C语言与C++语言的兼容性。
using :using的使用提高了程序的方便性,使用using 可以在引用名空间成员时不必使用名空间限定符::。using与namespace的结合使用对函数重载有一定的影响。
注意:在调用函数时,如果实参与形参的数据类型无法完全匹配,这种情况下可能会对实参进行数据类型转换。有可能char类型转换为int类型,或int类型转化为double类型,常常是由简单数据类型向复杂数据类型转换,有可能会丢失数据精度。
#include <conio.h>
#include <iostream.h>
namespace family //名空间的定义
{
char* name; //姓名
int age; //年龄
int sex; //性别
}
namespace car //名空间的定义
{
int model;
namespace size
{
int length;
int width;
}
}
namespace family //添加名空间的成员
{
bool fly;
}
namespace f = family; //定义名空间的别名
namespace c = car; //定义名空间的别名
int PlayTime; //外部变量属于全局名空间
itn main(int argc, char* argv[])
{
//采用名空间
family::name = "XiaoMing";
car::size::length = 50;
cout <<"The Family's name is :"<<family::name<<endl; //输出XiaoMing
cout<<"The Car's size length is"<<car::size::length<<endl; //输出50
//采用名空间的别名
cout<<"The Family's name is :"<<f::name<<endl; //XiaoMing
cout<<"The Car's size is :"<<c::size<<endl; //50
int PlayTime = 100; //临时变量,应区别于全局变量
::PlayTime = 101;
cout<<"Temporary PlayTime is:"<<PlayTime<<endl; //输出100
cout<<"Outer PlayTime is:"<<::PlayTime<<endl; //输出101
using namespace car; //使用关键字using
model = 2021;
size::length = 20;
cout<<"Using namespace car model:"<<model<<endl; //输出2021
cout<<"Using namespace car size length"<<length<<endl; //输出20
}