スコープ識別子
スコープ:身体のプログラム領域に積極的識別子
以下のカテゴリがあります。
- 関数プロトタイプスコープ
- ローカルスコープ(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;
}
結果:
このような長周期コード文に、三つのモジュールをテストし、実装しました。利点は以下のとおりです。再現性良く管理し、より良い、より読みやすく、より信頼性の高いコード。