C++ 靜態成員變量與靜態成員函數

一、靜態成員變量

1)定義靜態成員變量

 關鍵字 static 可以用於說明一個類的成員,靜態成員提供了一個同類對象的共享機制
 把一個類的成員說明爲 static 時,這個類無論有多少個對象被創建,這些對象共享這個 static 成員
 靜態成員局部於類,它不是對象成員

例如:
#include<iostream>
using namespace std;
class  counter
{     
static  int  num ; //聲明與定義靜態數據成員
  public :
      void  setnum ( int i ) { num = i ; }   //成員函數訪問靜態數據成員
      void  shownum() { cout << num << '\t' ; }
} ;
int  counter :: num = 0 ;//聲明與定義靜態數據成員
void main ()
{   counter  a , b ;
    a.shownum() ; //調用成員函數訪問私有靜態數據成員
    b.shownum() ;
    a.setnum(10) ;
    a.shownum() ;
    b.shownum() ;
}

2)使用靜態成員變量

// 例  使用公有靜態數據成員 
#include<iostream.h>
class  counter
{ public :
      counter (int a) { mem = a; }
      int mem;      //公有數據成員
      static  int  Smem ;   //公有靜態數據成員
} ;
int  counter :: Smem = 1 ;  //初始值爲1 
void main()
{   counter c(5);
    int i ;
    for( i = 0 ; i < 5 ; i ++ )
      { counter::Smem += i ;
         cout << counter::Smem << '\t' ;  //訪問靜態成員變量方法2
      }
    cout<<endl;
    cout<<"c.Smem = "<<c.Smem<<endl; //訪問靜態成員變量方法1
    cout<<"c.mem = "<<c.mem<<endl;
}

二、靜態成員函數

1)概念

 靜態成員函數數冠以關鍵字static
 靜態成員函數提供不依賴於類數據結構的共同操作,它沒有this指針
 在類外調用靜態成員函數用 “類名 :: ”作限定詞,或通過對象調用

2)案例

#include <iostream>
using namespace std;

class X{
int DataMem;
public:
    static void StaFun(int i,X *p);
};
void X::StaFun(int i,X *p)
{
    p->DataMem=i;
}
void g()
{
    X x;
    X::StaFun(1,&x);
    x.StaFun(1,&x);
}

3)疑難問題:靜態成員函數中,不能使用普通變量。

//靜態成員變量屬於整個類的,分不清楚,是那個具體對象的屬性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章