1. 程式人生 > >C++ 靜態成員變數與靜態成員函式

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)疑難問題:靜態成員函式中,不能使用普通變數。

//靜態成員變數屬於整個類的,分不清楚,是那個具體物件的屬性。