一:命名空间的使用
1://重定义,多次使用它,如果使用它,可以
namespace string1//string集合1
{
char str[10]{"calc"};
}
namespace string2
{
char str[10]{"notepad"};
}
//char str[10]{"calc"};全局变量
//char str[10]{"notepad"};
void main()
{//如何引用不同的命名空间里的字符串呢?
system(string1::str);//打开计算器
system(string2::str);
system("pause");
cin.get();
}
2:命名空间拓展。名称相同,意味着是同一个命名空间,可以改里面的,看下面的 str和cmd举例:
namespace string2//string集合1
{
char str[10]{"calc"};
}
namespace string2
{
char cmd[10]{"notepad"};
}
//char str[10]{"calc"};全局变量
//char str[10]{"notepad"};
void main()
{//如何引用不同的命名空间里的字符串呢?
system(string1::str);//打开计算器
system(string2::cmd);
system("pause");
cin.get();
}
3:命名空间里面可以有函数吗?可以的, system(string1::str);//打开计算器,访问命名空间的变量 ,string2::show();//调用函数show();打印notepad,访问命名空间的函数
namespace string1//string集合1
{
char str[10]{"calc"};
}
namespace string2
{
char cmd[10]{"notepad"};
void show()
{
cout << cmd << endl;
//也可以cout<<str<<endl;
}
}
//char str[10]{"calc"};全局变量
//char str[10]{"notepad"};
void main()
{//如何引用不同的命名空间里的字符串呢?
system(string1::str);//打开计算器,访问命名空间的变量
string2::show();//调用函数show();打印notepad,访问命名空间的函数
system("pause");
cin.get();
}
4:命名空间的无限嵌套
//举例:你可以用命名空间代表一国家,再代表一城市,再代表一县,再代表一镇,等等
namespace run
{
namespace runit
{
namespace runout
{
int num = 100;
void show()
{
cout << num<< endl;
}
}
}
}
void main()
{//打印num,用到Cpp叠加
run::runit::runout::num=199;
run::runit::runout::show();
system("pause");
cin.get();
}
5:命名空间的权限问题,是否存在共有私有的问题呢?
namespace data//针对namespace,我们创建一个data数据域
{
int num;
void show()
{
cout << num << endl;
}
}
using namespace data;//定义一个使用宏,使用命名空间,使用了命名空间后,下面的num=10就没有问题了
void main()
{
num = 10;
show();//原来要加上命名空间的作用域,才可以调用,自从有了using namespace,就可以直接访问内部变量,当作全局变量
cin.get();
}
6:命名空间不可以有私有private 都是共有的
/*对于命名空间来说,num和show我们都可以访问,如果在命名空间里可以有私有属性吗?private,也就是只有我内部可以访问,
外部不可以访问。答案是不可以.命名空间不存在私有的概念,全部为共有的,都可以直接访问*/
namespace data//针对namespace,我们创建一个data数据域
{
private int num;//错误
void show()
{
cout << num << endl;
}
}
using namespace data;//定义一个使用宏,使用命名空间,使用了命名空间后,下面的num=10就没有问题了
void main()
{
num = 10;
show();//原来要加上命名空间的作用域,才可以调用,自从有了using namespace,就可以直接访问内部变量,当作全局变量
cin.get();
}
7:namespace的层级关系
看下面举例:问?我调用show的时候num是多少,答案是10
/*对于命名空间来说,有一规律,内层覆盖外层,如果一定要使用外层,就要加域符号*/
namespace data//针对namespace,我们创建一个data数据域
{
int num=100;
namespace run
{
int num = 10;
void show()
{
cout << num << endl;
}
}
}
void main()
{
data::run::show();
cin.get();
}
8:/*对于命名空间来说,有一规律,内层覆盖外层,如果一定要使用外层,要num=100,就要加域符号*/
namespace data//针对namespace,我们创建一个data数据域
{
int num=100;
namespace run
{
int num = 10;
void show()
{
//::num,直接访问全局变量,全局变量不存在,访问值就是0
cout << data::num << endl;
}
}
}
using namespace data;//使用命名空间必须在定义之后
void main()
{
data::run::show();
cin.get();
}
9:匿名命名空间,匿名命名空间等价于全局变量
namespace //没有名字,叫匿名命名空间,可以访问num吗?结果是200
{
int num=100;
}
void main()
{
num=200;
cout << num << endl;
cin.get();
}
10:问题:命名空间会和全局变量发生冲突,举例:下面是错误的
namespace //没有名字,叫匿名命名空间,可以访问num吗?结果是200
{
int num=100;
}
int num=300;//错误的
void main()
{
num=200;
cout << num << endl;
cin.get();
}
using起到使用命名空间的作用