作用域限定符(::)的用法
阿新 • • 發佈:2019-02-08
第一種,就是區分同名的全域性變數(或函式)和區域性變數(或函式)。
- #include<iostream>
- usingnamespace std;
- int sum=0;
- constint N=15;
- int main()
- {
- int n,a[N],sum=0;
- cin>>n;
- for(int i=0;i<n;i++)
- cin>>a[i];
- for(int i=0;i<n;i++)
- {
- if(i%2==0) sum+=a[i];
-
::sum+=a[i];
- }
- cout<<"all="<<::sum<<' '<<"odd="<<sum;
- return 0;
- }
全域性變數sum用來求陣列的全部和,區域性變數sum用來求奇數小標元素的和。
第二種,類的成員函式在類外定義時,指明該函式的作用域為該類。
- #include<iostream>
- usingnamespace std;
- int calculate(int x)
- {return 2*x*x+4*x+6;}
- class A
- {
-
private:
- int a;
- public:
- int calculate();
- A(int m) {a=m;}
- };
- int A::calculate()
- {return 2*a*a+4*a+5;}
- int main()
- {
- A b(5);
- cout<<::calculate(5)<<endl;
- cout<<b.calculate()<<endl;
- return 0;
- }
第三種,名稱空間限定,當想輸出某名稱空間(如:namespace ns1)中成員的資料時,可以採用名稱空間名和作用域限定符::指向該成員資料。
<ol start="1" class="dp-cpp" style="font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 35px; padding: 0px; border: none; color: rgb(92, 92, 92); margin: 0px 0px 1px 45px !important;"><li class="alt" style="border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; margin: 0px !important; padding: 0px 3px 0px 10px !important;">namespace ns1 // 名稱空間 ns1
{
<span style="white-space:pre"> </span>int a=0;
<span style="white-space:pre"> </span>double b=1;
<span style="white-space:pre"> </span>float tax()
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>return a*b
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>namespace ns2 // 巢狀的名稱空間 ns2
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>int age;
<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>
}
// 如果想輸出名稱空間 ns1 中乘員的資料,可以採用下面的方法
cout<<ns1::a<<endl;
cout<<ns1::tax()<<endl;
cout<<ns1::ns2::age<<endl; // 需要依次指定外層和內層的名稱空間名
</li></ol>