命名空间
- 命名空间 namespace
- 1、::作用域运算符(表明 数据、方法 的归属性问题)
- 2、命名空间 namespace 解决命名冲突
-
- 2.1:namespace命名空间的定义
- 2.2:命名空间只能全局范围内定义(以下错误写法)
- 2.3:命名空间可嵌套命名空间
- 2.4:命名空间是开放的,即可以随时把新的成员加入已有的命名空间中(常用)
- 2.5:命名空间 可以存放 变量 和 函数
- 2.6:命名空间中的函数 可以在“命名空间”外 定义
- 2.7:无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接
- 2.8:给命名空间 取个别名
- 3. using 使用命名空间
-
- 3.1、简化了从命名空间的成员访问
- 3.2、using 使用整个命名空间
- 3.3、using 指明使用具体的命名空间 成员。(了解就可以)
- 3.4、using声明碰到函数重载(了解)
- 3.5、不同命名空间中的 同名成员 使用的时候注意 二义性
- 总结:
using namespace std;
int a = 10;//全局变量
void test01()
{
int a = 20;//局部变量
cout<<"局部变量a = "<
2、命名空间 namespace 解决命名冲突
2.1:namespace命名空间的定义
namespace 可以自己修改或创建
//定义一个名字为a的命名空间(变量、函数)
namespace a {
int a = 100;
}
namespace b {
int a = 200;
}
void test02()
{
//a::a a是属于a中
cout<<" a中a="<
2.2:命名空间只能全局范围内定义(以下错误写法)
2.3:命名空间可嵌套命名空间
namespace a {
int a = 1000;
namespace b {
int a = 2000;
}
}
void test03()
{
cout<<"a中的a = "<
2.4:命名空间是开放的,即可以随时把新的成员加入已有的命名空间中(常用)
namespace a {
int a = 100;
int b = 200;
}
//将c添加到已有的命名空间a中
namespace a {
int c = 300;
}
void test04()
{
cout<<" a中a="<
2.5:命名空间 可以存放 变量 和 函数
namespace a {
int a=100;//变量
void func()//函数
{
cout<<" func遍历a="<
2.6:命名空间中的函数 可以在“命名空间”外 定义
namespace a {
int a=100;//变量
void func();
}
void a::func()//成员函数 在外部定义的时候 记得加作用域
{
//访问命名空间的数据不用加作用域
cout<<" funb遍历a="<
运行结果:
2.7:无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接
namespace{
int a =10;
void func(){
cout << "hello namespace "<< endl}
}
void test(){
cout << "a:" << a << endl;
func();
}
2.8:给命名空间 取个别名
namespace verylongname{
int a = 10;
void func(){
cout << "hello namespace" << endl; }
}
void test(){
namespace shortname = verylongname;
cout << "verylongname::a : " << shortname::a << endl;
verylongname::func();
shortname::func();
}
3.1、简化了从命名空间的成员访问
namespace verylongname {
int a=100;
void func(){
cout<<"hello namespace"<
3.2、using 使用整个命名空间
namespace verylongname {
int a=100;
void func(){
cout<<" hello="" namespace"<
using直接使用 命名空间中的成员 不会和 全局变量冲突
namespace verylongname {
int a=100;
void func(){
cout<<" 命名空间中的成员="" 不会和="" 全局变量冲突="" cout<<"命名空间中a="<
3.4、using声明碰到函数重载(了解)
namespace a {
//函数重载 函数名 参数 组合代表是函数的入口地址
void func(){
cout<<" 无参的func"<
运行结果:
3.5、不同命名空间中的 同名成员 使用的时候注意 二义性
namespace a {
int a = 10;
}
namespace b {
int a = 20;
}
void test09()
{
//此处的a 不知道是a还是b中a
//cout<<"a = "<
1、命名空间的定义( 不能在 函数内 定义命名空间)
2、使用命名空间的成员 最安全的方式 命名空间名::成员名
3、using namespace 命名空间名;使用整个命名空间 (重要)
using namespace a;
4、单独 使用命名空间中的具体成员:using 命名空间名::成员名;
using a::a;
5、说明一下main中的std
#include
//使用标准的命名空间std
//std中所有成员名 可以直接使用
//cout endl cin都是命名空间std的成员
using namespace std;
int main(int argc, char *argv[])
{
std::cout << "hello world!" << std::endl;
cout << "hello world!" << endl;
return 0;
}