C++中的域作⽤符::的作⽤
1. 标识作⽤域的级别
2. 标识成员属于哪个类
3. 限定成员的作⽤范围
4. 指出作⽤域的范围
作⽤域符号::的前⾯⼀般是类名称,后⾯⼀般是该类的成员名称,C++为例避免不同的类有名称相同的成员⽽采⽤作⽤域的⽅式进⾏区分如:A,B表⽰两个类,在A,B中都有成员member。那么
A::member就表⽰类A中的成员member
B::member就表⽰类B中的成员member
#include <stdio.h>
int count = 0; //全局变量 0
void main()
{
int count = 10; //局部变量10
printf("count =%d\n",count);//局部变量屏蔽了全局变量所以输出结果是10
{
int count = 20;
printf("count =%d\n",::count); //作⽤域符号指出引⽤全局变量0
//::sort
}
}
1.  ::域作⽤符,⽤来引⽤全局的变量、函数等
⽐如
int  i  =  0;
void  test()
{
int  i  =  3;
cout<<i;                    //输出函数中的局部变量i
cout<<::i;                //输出全局变量i
}
const的作用
2. 域作⽤符,⽤来引⽤特定的函数或变量。⽐如说对类中的全局变量的引⽤;引⽤上⼀作⽤域对象(变量)。
3. 作⽤域运算符,指定某个范围内的成员,⽐如
class  A
{
public:
int  bbb();
//可以在类⾥⾯定义bbb,当你在类外⾯定义的时候就要指定他是属于哪个类的成员函数
};
int  A::bbb()
{
cout  <<  "类的外部定义";
}
如果没有int  A::bbb()只是写了int  bbb()的话就会说bbb没有声明,会出错的
4.最重要的⼀点:名称是作⽤域解析运算符"::".
下⾯让我们来了解名字空间的含义
名字空间是⼀种逻辑分组的机制.也就是说,如果有⼀些声明按照某种标准在逻辑上属于同⼀个集团,就可以将它们放⼊同⼀名字空间,以表明这个事实,例如,我定义⼀个名字空间N  将变量a,  b  函数f()放⼊其中
int  a;
namespace  N{
int  a,  b;
void  f(){
::a=1;                  //(被屏蔽的)全局a的限定名
a=10;                  //⾮限定名访问内层a
}
}
void  g()
{
a=10;                    //全局的a
N::a=7;                //名字空间N作⽤域中的a(限定名)
}
位于作⽤域解析运算符左边的限定符必须或者是⼀个名字空间的名字,或者是⼀个类对象的名字,  这也意味着,局部于某个函数的名字不能通过限定名的⽅式访问
第⼀种,就是区分同名的全局变量(或函数)和局部变量(或函数)。
[cpp]
1. #include<iostream>
2. using namespace std;
3. int sum=0;
4. const int N=15;
5. int main()
6. {
7.    int n,a[N],sum=0;
8.    cin>>n;
9.    for(int i=0;i<n;i++)
10.    cin>>a[i];
11.    for(int i=0;i<n;i++)
12.    {
13.        if(i%2==0) sum+=a[i];
14.        ::sum+=a[i];
15.    }
16.    cout<<"all="<<::sum<<' '<<"odd="<<sum;
17.    return 0;
18. }
全局变量sum⽤来求数组的全部和,局部变量sum⽤来求奇数⼩标元素的和。
第⼆种,类的成员函数在类外定义时,指明该函数的作⽤域为该类。
[cpp]
1. #include<iostream>
2. using namespace std;
3. int calculate(int x)
4. {return 2*x*x+4*x+6;}
5. class A
6. {
7.    private:
8.    int a;
9.    public:
10.    int calculate();
11.    A(int m) {a=m;}
12. };
13. int A::calculate()
14. {return 2*a*a+4*a+5;}
15. int main()
16. {
17.    A b(5);
18.    cout<<::calculate(5)<<endl;
19.    cout<<b.calculate()<<endl;
20.    return 0;
21. }
第三种,命名空间限定,当想输出某命名空间(如:namespace ns1)中成员的数据时,可以采⽤命名空间名和作⽤域限定符::指向该成员数据。
1.
<ol start="1" class="dp-cpp" ><li class="alt" >namespace ns1  // 命名空间 ns1
2.
{
3.
<span > </span>int a=0;
4.
<span > </span>double b=1;
5.
<span > </span>float tax()
6.
<span > </span>{
7.
<span > </span>return a*b
8.
<span > </span>}
9.
<span > </span>
10.
11.
12.
<span > </span>namespace ns2  // 嵌套的命名空间 ns2
13.
<span > </span>{
14.
<span > </span>int age;
15.
16.
17.
<span > </span>}<span > </span>
18.
<span > </span>
19.
}
20.
21.
22.
//  如果想输出命名空间 ns1 中乘员的数据,可以采⽤下⾯的⽅法
23.
24.
25.
cout<<ns1::a<<endl;
26.
cout<<ns1::tax()<<endl;
27.
cout<<ns1::ns2::age<<endl;  // 需要依次指定外层和内层的命名空间名28.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。