概念
- 宣言の前に静的キーワードを追加すると、静的メンバー変数または関数になります
- 静的メンバーは1つだけであり、類似したすべてのオブジェクトによって共有されます。静的メンバーはオブジェクトに属しておらず、クラスに属しています!
- sizeof演算子はオブジェクトの内部にないため、静的メンバー変数は計算されません。
- 静的メンバー変数関数には、オブジェクトを経由せずにアクセスできます
- 本質的にグローバル。
訪問
- クラス名:メンバー名
- オブジェクト名。メンバー名(単なるフォーム)
- ポインター->メンバー名(単なるフォーム)
- 参照。メンバー名(単なるフォーム)
注意
- 静的メンバー変数は、クラスファイルで初期化する必要があります。初期化しないと、コンパイルできません。
- 静的メンバー関数は、静的メンバー変数を使用するか、静的メンバー関数を呼び出すだけです!
- コンストラクターを定義してから静的変数を変更しますが、不明なコンストラクターがいくつかあり、静的変数にエラーが発生する場合があります。
- 一時オブジェクトは、死んだときにデストラクタを呼び出します。デストラクタの静的変数を操作すると、エラーが発生する場合があります。(解決策は、そのような招待されていないゲストに対抗するためのコピーコンストラクターを作成することです)
例:4人でリレーレースを練習します。各人の速度と合計時間を書き留めてください
#include<iostream>
#include<string>
using namespace std;
class athlete
{
private:
string name;
double speed;
public:
athlete(string n="No",double s=0):name(n),speed(s){
}
athlete(athlete& a):name(a.name),speed(a.speed){
}
void timing(){
time+= speed;}
static void show();
~athlete();
static double time;
static int Member;
} ;
double athlete::time=0;
int athlete::Member = 4;
void athlete::show()
{
cout<<"Total time: "<<time<<endl;
}
athlete::~athlete() {
cout<<name<<" finish, spend "<<time<<" sec\n";
Member --;
}
int main()
{
string* p;
double sp;
while(athlete::Member) //我觉得这样子很阔以
{
cout<<"Enter name and speed:\n";
p = new string;
cin>>*p;
cin>>sp;
athlete(*p,sp).timing();
delete p;
}
athlete::show();
}
補足知識:
- プライベート静的はプライベートであり、外部ベイからアクセスすることはできません。静的メソッドはduを通じて静的メソッドを介してのみ呼び出すことができます。これにより、変数の変更を防ぐことができます。パブリック静的はパブリックであり、外部からアクセスでき、値を変更できます(あなたはプライベート宣言にいますが、メンバー関数を呼び出しています、コンパイラーはそれがプライベートであると通知します)