域操作符
介绍
域操作符位为::
的形式,在运算符中等级最高,定义它是为了避免不同的类名定义了同名的变量而引起的二义性问题。
用法
域操作符的用法形式为[类名/命名空间]::变量名/函数名/结构体名/类名
,[ ]里面的内容可以省略。
::a //表示全局作用域下的变量a
using B::b //表示使用命名空间B下的变量b
C::c //表示C类下面的变量c
//函数与结构体等使用方法与变量类似
实例
1°使用全局同名变量
#include <iostream>
using namespace std;
int a = 10;
void test(){
int a = 100;
cout<<a<<endl; //打印结果为100
cout<<::a<<endl; //打印结果为10
}
int main(void){
test();
}
2°使用自定义命名空间下的函数
#include <iostream>
using namespace std;
namespace A{
void fun();
}
void A::fun(){
cout<<"namespace A"<<endl;
}
int main(void){
A::fun(); //打印结果为namespace A
}
命名空间
介绍
命名空间里面可以放变量、函数、结构体、类等东西。
用法
1°定义命名空间
#include <iostream>
using namespace std;
namespace A{ //定义了一个A空间
int a = 100;
void fun();
namespace B{
int a = 10;
};
}
void A::fun(){
cout<<"namespace A"<<endl;
}
int main(void){
cout<<A::a<<endl; //打印结果为100
cout<<A::B::a<<endl; //打印结果为10
}
//注意:空间里面可以使用别的命名空间,也可以套命名空间
2°using的用法
#include <iostream>
using namespace std;
namespace A{ //定义了一个A空间
int a = 100;
}
int main(void){
int a = 10;
using A::a;
cout<<a<<endl; //此时编译器会报错,无法确定a是main函数中的还是命名空间A里面的
using namespace A;
cout<<a<<endl; //打印结果为10,如果a即在命名空间中有,又在使用的函数作用域中有,优先使用函数作用域中的那个变量a,若想打印命名空间中的变量a,可以采用下面方法。
cout<<A::a<<endl; //打印结果为100
}