3、静的変数と関数

1、グローバル変数

#include <iostreamの>
 使用して 名前空間STD、

INT A = 1。; 

無効 FUNC(INT&A 
{ ; ++                          // 自己追加操作 
    COUT << << ENDL;            //は、Aの値が印刷
} 

INT (主に)
{ 
    FUNC(A);                      //は呼び出し
    FUNC(A)を、
    FUNC(A); 
    戻り 0 ; 
}

 注意:関数宣言では、我々は「&」を追加しなければならない、ということですか、値が変更されません。またはポインタ

分析:プログラム変数は、印刷の値を増加させる、グローバル変数としての主な機能の外で定義されました。グローバル変数は、グローバルスコープ、ソースファイル内のグローバル変数の定義を持つプログラムの最後にのみ破壊されたまで、ソースファイルはすべての変数、グローバル変数にアクセスすることができます。

2、ローカル変数

書式#include <iostreamの>
 使用して 名前空間はstdを、


INT のmain()
{ 

    int型= 4 ; 
    coutの << << てendl; 
    { 
        int型、B = 1 
        coutの << B << てendl; 
    } 
    COUT << B << ENDL。
    リターン 0 ; 
}

 

 

分析:{}の最後に定義の範囲からローカル変数、

同じローカル変数は、関数を介してアクセスすることができません。

書式#include <iostreamの>
 使用して 名前空間はstdを、

ボイドFUNC()
{ 
    COUT << << ENDL。
} 

int型のmain()
{ 

    int型= 4 ; 
    FUNC(); 
    リターン 0 ; 
}

 

分析:宣言され、メイン関数で定義されているが、FUNCに渡されていない()、構文エラーが発生します。

3、静的変数

#include <iostreamの>
 使用して 名前空間STD; 

静的INT A = 1。; 

ボイド FUNC(INT&A 
{ ++;                          // 自己追加操作 
    COUT << << ENDL;            // の値を出力
} 

int型のmain()
{ 
    FUNC(A);                      //は呼び出し
    FUNC(A)を、
    FUNC(A); 
    戻り 0 ; 
}

 

通常の目の前に静的変数を加えた変数、staticキーワードを宣言

ことを除いて、同じ方法で格納されたスタティック変数およびグローバル変数:非静的グローバル変数のスコープは、ソースプログラムは、ソースファイルの複数から構成され、全体源であるが、各ソースファイル内の非静的グローバル変数を宣言しました彼らは効果的です。静的なグローバル変数はその範囲に制限されて、その文のソースファイルでのみ有効ですが、それは同じソースプログラムで使用することはできません。

C言語でアプリケーション内の4、静的変数++

クラスの例については、学生

書式#include <iostreamの> 
の#include < 文字列 >
 使用して 、名前空間STD; 

クラスの学生
{ 
パブリック
    学生(文字列名、int型の年齢、フロートストア、int型の COUNT);               // コンストラクタ宣言 
    〜学生を();                                               // 宣言デストラクタ
    int型; GetCountの()
 プライベート文字列名;
     int型年齢;
     フロート店;
     int型カウント; //记录学生数量
    
}。
学生::学生(文字列名、int型の年齢、フロート店、int型のカウント数)
{ 
    この - >名前= 名前;
    この - >年齢= 年齢;
    この - >店舗= ストア;
    この - >数= 数えます。
    裁判所未満 << " 学生()............... " << てendl; 
} 
学生::学生()
{ 
    COUT << " 〜学生()............. "<< てendl; 
} 
int型の学生:: GetCountの()
{ 
    返す これを - > カウント。
} 
int型のmain()
{ 
    学生STU1(" "1899.31 )。
    COUT << stu1.GetCount()<< ENDL。
    学生STU2(" "191002 )。
    COUT << stu2.GetCount()<< ENDL。
    coutの <<てendl << てendl; 

    リターン 0 ; 
}

 

分析:このプログラムカウントは、クラスのプライベートメンバを宣言します。クラスへのアクセス以来。プログラムの中で、学生の数を記録するためにカウントし、手動で入力された値は意味がありません数えます。

           そのため、コンストラクタの呼び出しは、count--、デストラクタを呼び出し、++数えます。

           また、リリースSTU1が消えるので、変数はその、カウントする必要はありませんのでご注意カウントデータは学生のクラスのメンバーに属します

だから、カウントは静的データメンバとして定義されます。

いくつかの変更と、次のプログラム

書式#include <iostreamの> 
の#include < 文字列 >
 使用して 、名前空間STD; 

クラスの学生
{ 
パブリック
    学生(文字列名、int型年齢、フロートストア);               //は、コンストラクタ宣言 
    〜学生を();                                               // デストラクタを宣言
    をint GetCountの( );
 プライベート文字列名;
     int型年齢;
     フロートストア、
     静的な int型 COUNT;                                         //静的データメンバ変数を定義します
    
;} 
::学生学生(文字列名、int型年齢、フロート店)
{ 
    この - >名前= 名前;
     この - > =年齢年齢;
     この - >店= ストア; 
    COUNT ++;                                                   // COUNTを++ 
    << COUT " 学生()............... " << てendl; 
} 
学生::学生()
{ 
    COUNT - ;                                                  // count--
    << COUT " 〜学生()............. " << ENDL; 
} 
int型の学生:: GetCountの()
{ 
    戻り 、この - > COUNT; 
} 
int型の学生:: COUNT = 0 INTは()の主
{ 
    学生 = STU1 * 新しい新しい学生(18があり99.3);           // カウント文の値へのポインタの解放を観察するために一つずつ、便利後 
    COUT << stu1-> GetCountの()<< てendl; 
    学生 * STU2 = 新新学生("19100 ); 
    COUT << stu2-> GetCountの()<< ENDL; 
    COUT << ENDL << ENDL、
    
    削除STU1と、
    COUT << stu2-> GetCountの()<< ENDL、
     削除STU2と、
   COUT < <学生:: GetCountの()<< ENDL; 

    戻り 0 ; 
}

 

 

 

プログラム:

 

 

 

 

 分析:プログラム、各STUの定義では、カウントがインクリメントされ、カウント、後にのみdleteマイナス1。

クラス構文の静的データメンバ:

、プログラムは、静的な型の一部である、すなわち、それは、オブジェクトに基づいて定義することができないため、外側のメイン関数で定義する必要

int型の学生::回数= 0 ;

 

B、それはクラス名によってアクセスすることができます

coutの<<学生::回数<<てendl;

 

それはプライベートなメンバーであり、そのため、直接アクセスすることはできませんので、しかし、我々は静的関数を使用する必要があります。

5、静的関数

一例として、上記のプログラムに

分析:静的変数は、それはまた、関数のクラスに属し、また、クラス名を介してアクセスすることができます。静的メンバ関数がクラスに属しているので、静的メンバ関数は、メンバーの共通の特性を知っていない、一般的な普通のメンバ関数とメンバ変数を呼び出すことはできませんどのオブジェクトが唯一の静的リソースクラスを呼び出すことができ属します。

6、静的変数と動的変数の間の差

変数は通常サブセット記憶装置上に定義され、プロセスが終了するまで変更されないままされ、静的変数。静的変数は、グローバル変数は、動的、静的なストレージです。

ストレージユニットを割り当てるとき、プログラム実行中に動的変数に、それは、使用されているBは、使用後すぐに放出しました。

C、静的変数は一度だけ初期化され、繰り返しの初期化構文エラーが発生します。静的変数が初期化されていない場合、システムは自動的に0、及びランダム値に対する動的変数として定義されます。

D、グローバルデータ:静的データ、グローバル変数、constの定数。

     ヒープは:プログラマによって新しい自分自身の動的データを手動で解除する必要があります。あなたが解放を忘れてしまった場合、メモリリークとなり、プログラムの最後には、オペレーティングシステムによって回収されます。

     スタック領域:自動的にIDEによって自動的に割り当て終了時に解放内部変数関数。

おすすめ

転載: www.cnblogs.com/aaakihi/p/11605548.html