スコープ
定義:スコープは、身体のプログラム領域における有効な識別子です。
カテゴリー:1;関数のプロトタイプのスコープ
2:ローカルスコープ
3:クラススコープ
4:名前空間スコープ
1;関数プロトタイプ範囲は、アクションの関数プロトタイプ宣言パラメータ範囲内に関数プロトタイプ範囲です。
例えば:
double area(double radius);
識別子半径機能領域のパラメータリストの左右のブラケットとの間の作用の範囲が、他の場所で参照することができません。
2;ローカルスコープ:関数のパラメータリストのスコープパラメータは、関数の本体全体の遠端にあるリストの先頭からパラメータ宣言、。取締役会は、持っています
例えば;
#include<iostream>
using namespace std;
int main()
{
int a,b,t,j;
cin>>a>>b;
t=a+b;
if(a>0)
{
int c;
cin>>c;
j=a+c;
}
cout<<"t的值为"<<t<<" "<<"j的值为"<<j<<endl;
}
我々は、B、T、J範囲全体の主な機能上からは、しかし、Cがスコープ内にあるかどうかを確認することができます。
3;クラススコープ:クラスは、クラスXの範囲のm個のメンバーを有するクラスの周知の部材の集まりとして見ることができます。
メートルにアクセスするための3つの方法があります。
1;ローカルスコープ識別子がメンバー関数Xで同じ名前で宣言されない場合、この関数は直接メンバmをアクセスすることができます。
例えば;
Date date;
date.show();
2:XMまたは式X :: M。
例えば:
void Date::show()
{
cout<<Date::day<<endl;
}
3:Xのptrがクラスへのオブジェクトポインタをポイントする請求ptr-> M、によってそのような発現。
例えば;
Date*date = new date();
date->show();
4;名前空間スコープ:名前空間は、名前空間の範囲を特定し、名前空間内のすべてのステートメントは、フロントの各識別子の範囲に属していない、名前空間スコープです。
名前空間の効果は、同じ名前のタイプによって引き起こされる種々のモジュールと機能の間で発生する可能性による誤差を排除します。
以下は、使用のいくつかの形式の名前空間スコープです。
1;あなたは他の名前空間識別子を参照する必要がある場合は、名前空間内で宣言、現在の名前空間識別子を直接参照することができ、
::名前空間名識別子名
例えば:
namespace SomeNs{
class SomeClass{....};
}
2;長すぎるあなたが名前空間で修飾感じる場合は、usingステートメントを使用することができます
using命名空间名::标识符名;
using namespace::标识符名;
3;ネストされた名前空間を可能に
例えば:
namespace OuterNs{
namespace InnerNs{
class SomeClass{....};
}
}
検証の例として、スペースのグローバルスコープを持つように宣言し、次のグローバル変数は、彼らは文書全体で有効です。
#include<iostream>
using namespace std;
int i; //在全局命名空间中的全局变量
namespace Ns {
int j; //在Ns空间中命名的全局变量
}
int main()
{
i = 5; //为全局变量i赋值
Ns::j = 6; //为全局变量j赋值
{ //子块1
using namespace Ns; //使得在当前块中可以直接引用Ns命名空间的标识符
int i; //局部变量,局部作用域
i = 7;
cout << "i=" << i << endl; //输出7
cout << "j=" << j << endl; //输出6
```
}
cout << "i=" << i << endl; //输出5
return 0;
}