識別子の範囲を

スコープ

定義:スコープは、身体のプログラム領域における有効な識別子です。

カテゴリー: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;


}
概要:実際には、検出スコープの範囲は上記の説明の別の場所で定義された変数を意味し、そして異なる状況において異なる結果があるであろう。

おすすめ

転載: www.cnblogs.com/byp-520/p/11593563.html