スコープ識別子 - ノート

スコープ識別子

スコープ:身体のプログラム領域に積極的識別子

以下のカテゴリがあります。

  • 関数プロトタイプスコープ
  • ローカルスコープ(Scopeブロック)
  • クラススコープ
  • 名前空間スコープ

1.関数プロトタイプスコープ

ときに、関数のプロトタイプ宣言のスコープパラメータは、関数プロトタイプスコープです。

もう一つ:C ++の関数のプロトタイププログラムの適用範囲は、最小の範囲であります

例:

    double area(double radius);//函数声明

ピクチャーエラー:

彼は説明した:範囲の半径を左右の括弧の間に。(注:関数プロトタイプ関数のパラメータリストは、パラメータタイプ識別子を省略することも可能であるが、読みやすさのために強い、識別子を書き込む必要があります。)

役割:コードの可読性を高めるために

2.ローカルスコープ(ローカル変数)

スコープパラメータの関数リスト:関数全体の端からパラメータ宣言→

身体機能の内部で宣言された変数は:→かっこで宣言します

例:
の#include
名前空間stdを使用。

        void fun(int para) {    //定义一个测试函数,para为形参,作用域到该函数大括号为止
            cout << "para = " << para<<endl;//可以打印出para = 0
            int test1 = 1;      //定义test1,作用域从此到所在块大括号为止
            if (test1) {     
                cout << "--------大括号开始" << endl;
                int test2 = 2;      //定义test2,作用域是从此到所在块大括号为止
                cout << "test1 = " << test1 << endl;   //在test1作用域范围内,所以可以访问
                cout << "test2 = " << test2 << endl;
                cout << "--------大括号结束" << endl;
            }
            cout << "test1 = " << test1 << endl;    
            cout << "para = " << para << endl;  //分别可以打印出test1 和 para,理解作用域
        
        }
        //测试函数
        int main() {
            fun(0);
            return 0;
        }
            

スクリーンショットの結果:

アクセス識別子スコープ・エラーの場合。以下のような:

あなたが追加した場合があればint test1 = 3;レベルtest1の上でブロックされます

結果:

だから、ローカルまたはグローバル識別子の定義を明確な目的を使用した場合。

役割:

  • 汚染されるデータを防ぎます。あなたは、外部のデータならば使用したくない場合は、内部の場合は定義され、その誤差の外にアクセスした場合することができます。
  • メモリ空間を保存します。変数は、ローカル変数にローカルスコープを持って、ローカル変数は部屋を作るために、使用後に破棄されます。

3.クラススコープ

クラスは、よく知られているメンバーの集合として見ることができます。

3つの方法でアクセスクラスXのメンバー:

  • Ruoguo Xと同じ名前で宣言されていない地元のメンバ関数スコープ識別子は、あなたが直接メンバmにアクセスすることができます。Ruoguo同じ名前、this-> mのアクセスによる。
  • XMまたはX ::メートルのアクセス、X :: mは静的メンバにアクセスするために使用されます。
  • ptrがクラスへのポインタであるptr-> mのアクセス、。

例:

        #include<iostream>
        using namespace std;
        
        class X {  //定义一个类X
        public:
            void fun1();
            void fun2(int m);
        private:
            int m = 3;
        };
        void X::fun1() {
            cout << "m =" << m << endl;//没有同名标识符,直接访问
        }
        void X::fun2(int m) {  //通过X::fun2访问
            cout << "传入的m = " << m << endl;  //有同名标识符,打印传入的参数
            cout << "访问类的m = " << this->m << endl;
        }
        int main() {
            X x;
            x.fun1();  //!!没有参数也要加括号
            x.fun2(6);
            cout << "指针访问-----------------" << endl;
            X* ptr = &x; //给指针赋初值
            ptr->fun1();
            ptr->fun2(5);
            return 0;
        }

出力:

4.名前空間スコープ(グローバル変数)

役割:フォルダの同等の役割。

通常、開発中の別のモジュールで構成され、異なる担当者によって開発された異なるモジュールは、同じ名前に起因する誤差があるかもしれません。名前空間は、最後にそれが南京路である、などが「南京路」、上海南京路南京路武漢として、この問題を解決することができますか?武漢や南京路の前に、このような「名前空間」とは区別できると連結されている場合、上海。

構文:

    namespace 命名空间名{     //定义
    
        命名空间的声明(函数声明,类申明,全局的数据......)
    

    }
    命名空间名::标识符号      /使用

    //在另一个作用域使用,c++提供了using语句
    using 命名空间名::标识符号;     //暴露指定标识符
    using namespace 命名空间名;    //暴露该命名空间所有标识符

例:

ヘッダファイルの.hを作成し、グローバル宣言を入力します。

namespace.h

    #pragma once  /*表示该文件只运行一次,,因为文件中如果加载了很多东西,每次需要的时候都要加载的话会浪费运行速度。*/
    #include<iostream>
    using namespace std;
    #ifndef MYHEAD_H    /*编译预处理,防止命名空间嵌套时重复命名*/
    #define MYHEAD_H  
    namespace mynamespace {
        class Tangle {
            private:
                double lon, wid; //只是外部不能访问,可以进行修改
            public:
                void caltangle(int lon = 1, int wid = 1); //声明caltangle函数,并给lon wid 默认参数
        };
    }
    #endif 

そして、caltangle機能を実現.CPP新しいファイルを作成し、長方形の面積を計算します

namespace.cpp

    #include"./namespace.h"//引入头文件
    #include<iostream>
    
    using namespace std;
    using namespace mynamespace;//暴露mynamespace所有标识符
    //实现caltangle函数,计算长方形的面积
    void Tangle::caltangle(int lon=1, int wid=1) {
        long area = lon * wid;
        cout << "arae = " << area;
    }

テスト

main.cppに

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    #include"./namespace.h"  //引入头文件
    using namespace mynamespace;  //暴露mynamespace所有标识符
    //测试
    int main() {
        Tangle tag;
        int lon, wid;
        cout << "enter two number:";
        cin >> lon >> wid;
        tag.caltangle(lon, wid);
        return 0;
    }

結果:

このような長周期コード文に、三つのモジュールをテストし、実装しました。利点は以下のとおりです。再現性良く管理し、より良い、より読みやすく、より信頼性の高いコード。

おすすめ

転載: www.cnblogs.com/SailorMoon-z/p/11593489.html