学習の3週目:静的メンバー変数と関数

概念
  1. 宣言の前に静的キーワードを追加すると、静的メンバー変数または関数になります
  2. 静的メンバーは1つだけであり、類似したすべてのオブジェクトによって共有されます。静的メンバーはオブジェクトに属しておらず、クラスに属しています!
  3. sizeof演算子はオブジェクトの内部にないため、静的メンバー変数は計算されません。
  4. 静的メンバー変数関数には、オブジェクトを経由せずにアクセスできます
  5. 本質的にグローバル。
訪問
  1. クラス名:メンバー名
  2. オブジェクト名。メンバー名(単なるフォーム)
  3. ポインター->メンバー名(単なるフォーム)
  4. 参照。メンバー名(単なるフォーム)
注意
  1. 静的メンバー変数は、クラスファイルで初期化する必要があります。初期化しないと、コンパイルできません。
  2. 静的メンバー関数は、静的メンバー変数を使用するか、静的メンバー関数を呼び出すだけです!
  3. コンストラクターを定義してから静的変数を変更しますが、不明なコンストラクターがいくつかあり、静的変数にエラーが発生する場合があります。
  4. 一時オブジェクトは、死んだときにデストラクタを呼び出します。デストラクタの静的変数を操作すると、エラーが発生する場合があります。(解決策は、そのような招待されていないゲストに対抗するためのコピーコンストラクターを作成することです)

例: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();
 }

補足知識:

  1. プライベート静的はプライベートであり、外部ベイからアクセスすることはできません。静的メソッドはduを通じて静的メソッドを介してのみ呼び出すことができます。これにより、変数の変更を防ぐことができます。パブリック静的はパブリックであり、外部からアクセスでき、値を変更できます(あなたはプライベート宣言にいますが、メンバー関数を呼び出しています、コンパイラーはそれがプライベートであると通知します)

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/ZmJ6666/article/details/108556592