1.使用名字空间,对程序中的标识符(类型、函数、变量)按照某种逻辑规则划分成若干组。
2.定义名字空间
namespace 名字空间名{
名字空间成员;
}
3.使用名字空间
1>作用域限定符: 名字空间名::名字空间成员;
表示访问特定名字空间中的特定成员.
2>名字空间指令: using namespace 名字空间名;
表示在该条指令之后的代码对指令所指向名字空间中的所有成员均可见。可直接访问这些成员,无需加作用域限定符"::"。
3>名字空间声明: using 名字空间名::名字空间成员
表示将特定的名字空间中的某个成员引入当前作用域,可直接访问这些成员,无需加"::"。
4.匿名名字空间
如果一个标识符没有被显式地定义在任何的名字空间中,编译器会将其缺省地置于匿名空间中。
对匿名名字空间中的成员通过“::名字空间成员”的形式访问。默认可见。
5.名字空间 合并
重名的名字空间属于合并关系。
例子:
--------------------------------------------------------------
/*bank.cpp*/
#include <iostream>
using namespace std;
//namespace {
void print(int money){
cout<<money<<endl;
}
//}
namespace abc{
int balance = 0;
void save(int money)
{
balance += money;
}
void draw(int money)
{
balance -= money;
}
void salary( int money )
{
balance += money;
}
void print(int money){
cout<<"农行:;";
::print(money);
}
}
namespace ccb{
int balance = 0;
void save(int money)
{
balance += money;
}
void draw(int money)
{
balance -= money;
}
void salary(int money){
balance += money;
}
}
int main( void )
{
using namespace abc;
save(5000);
cout <<"农行"<< balance << endl;
draw(3000);
cout << "农行"<< balance << endl;
//using namespace ccb;会引发歧义
save(10000);//实际上存在农行的账户里
cout << "建行"<< balance << endl;
draw(3000);//实际上取得是农行的账户
cout << "建行"<< balance << endl;
using ccb::salary;//名字空间声明,因为
salary(6000);
cout << "建行"<< ccb::balance << endl;
return 0;
}