1. 程式人生 > >靜態成員函式和static的作用及用法

靜態成員函式和static的作用及用法

類裡面的靜態成員函式相當於類裡面的全域性函式,它能訪問類裡面的私有建構函式、解構函式、普通函式以及成員變數,靜態成員只能通過靜態成員函式進行訪問。

靜態私有成員在類外不能被訪問,可通過類的靜態成員函式來訪問;

當類的建構函式是私有的時,不像普通類那樣例項化自己,只能通過靜態成員函式來呼叫建構函式。

物件之間通過類的靜態成員變數來實現資料的共享的。靜態成員變數佔有自己獨立的空間不為某個物件所私有。

#include"iostream.h"

class Point

{
 
private: int X;
  
private: int Y;
public:
  static Point * fun()
  {
   Point B(1,7);
   Point * p = new Point(12,89);
   cout<<p->X <<endl<<p->Y <<endl;
   return p;
  }
  Point()
  {
  }
  
private: Point(int x, int y)
   
   {
   
    X = x;
   
    Y = y;
   
   }

   ~Point()
   {
    cout<<"~PointA"<<endl;
   }
  
};

void main()
{
 
 
 Point *A=Point::fun();
  //  cout<<A->X <<endl<<A->Y <<endl;

}


/************************************************************************************************/

static的作用及用法

1)函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;
(2)在模組內的static全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;
(3)在模組內的static函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內;
(4)在類中的static成員變數屬於整個類所擁有,對類的所有物件只有一份拷貝;
(5)在類中的static成員函式屬於整個類所擁有,這個函式不接收this指標,因而只能訪問類的static成員變數


int fun(int& val)
{
 static int count = val;
//這裡count是靜態成員變數,只被初始化一次
 val++;
 return (count * val);
}

void main()
{
 int sum = 0, val = 1;
 for(int j = 0; j < 2; j++)
 {
  sum += fun(val);
 }
 cout<<"sum = "<<sum<<endl;

}