1.staticクラスメンバ
C ++プライマーの内側には、通常のクラスのデータメンバとは異なり、静的クラスのメンバー、クラス内のすべてのオブジェクトのクラスの独立の静的データメンバを言いました。静的クラスのデータメンバは、クラスに関連付けられています
しかし、オブジェクトは、クラスの定義に何らかの関連性を持っていません。つまり、各オブジェクトクラスを持つように、すべてのクラスオブジェクトは、クラスのメンバが共有静的である通常のクラスの静的データメンバーのようではありません。
静的メンバにクラスオブジェクトの変形例では、オブジェクトBに対応するオブジェクトのクラス値の静的メンバも1です。
静的クラスのメンバは、空間オブジェクトを取ることはありません
書式#include <iostreamの> 使用して名前空間はstdを、クラスA { パブリック: A(){} 〜A(){} プライベート: 静的int型 X; // 静的INT X = 1;错误静的ボイド M_DATA(INT A) {X = 。} }。int型 A :: X = 1 ; INT メイン() { my_class。 COUT << のsizeof(my_class)<< ENDL。 リターン0 ; }
注:静的クラスオブジェクトは、クラスの外を初期化する必要があります
クラステキスト { パブリック: 静的 int型カウント; }; int型テキスト:: COUNT = 0 ; // 初期化されなければならない静的メンバ変数を持つ INT メイン() { テキストT1と、 COUT << t1.count << ENDL; 戻り 0 ; } // プログラムの出力0
オブジェクトが存在する前に、静的変数は、クラス初期外変更するように静的変数は、修飾されました。静的変数は、すべてのオブジェクトによって共有されるため、既存のオブジェクトよりも良好でなければなりません。
クラステキスト { パブリック: 静的 int型カウント; }; int型テキスト:: COUNT = 0 ; // 初期化されなければならない静的メンバ変数を持つ INT メイン() { テキストT1を、 テキストT2; t1.count = 100 ; // T1オブジェクトへ静的メンバーは100カウントし 、COUTのt2.count << << ENDL // オブジェクトを静的部材T2を印刷するとき、ディスプレイ100が0でない 戻り 0 ; }
2.staticクラスのメンバ関数
修飾された静的クラスメンバーは、クラスに属しているので、カバーされていないので、このポインタの静的なクラスメンバ関数が存在しない、このポインタは、このオブジェクトを指すポインタです。このポインタ、静的メンバ関数は何もありませんので
アクセス非静的クラスのメンバは、のみ変更され、静的なクラスメンバーをアクセスすることができますことはできません。
クラステキスト { パブリック: 静的 int型ファン() { 戻りNUM; } 静的 int型COUNT; INT NUM; }; int型テキスト:: = COUNT 。5 ; // 静的メンバ変数とを初期化しなければならない INT メイン() { テキストT1と、 テキストT2; t1.num = 100 ; t1.fun(); // エラーが発生し、楽しい非静的クラスのメンバ関数の戻りカウントが正しい返す場合 、リターン 0 ; }
メソッドを呼び出します。
呼び出すことによって、(1)クラスのオブジェクト
クラス名を呼び出すことによって、(2)
#include <iostreamの> 使用して名前空間STD; クラスアカウント{ パブリック: 静的ダブル m_rate; // 宣言:独立オブジェクトクラス静的ボイド(set_rate CONST ダブル&X){ m_rate = X; } }; ダブルアカウント:: = m_rate 1.0 ; // 初期化設定、初期値(定義:取得メモリ)を設定INT メイン() { アカウント:: set_rate(5.0); // 呼び出しクラスの名前 COUT :: m_rateアカウント<< << ENDL。 アカウント; a.set_rate(7.0); // オブジェクトは静的メンバ関数を呼び出すには、コンパイラは、もはやこのインジケータのパラメータ、暗黙の動作に追加されません COUT << <<アカウントm_rate :: ENDL; 戻り 0 ; }