C語音中關鍵字static的做用及類的static屬性

關鍵字static的做用是什麼?ios

1)在函數體,一個被聲明爲靜態的變量在這一函數被調用過程當中維持其值不變。
2) 在模塊內(但在函數體外),一個被聲明爲靜態的變量能夠被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。
3) 在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地範圍內使用。
數組

 

類的static屬性:函數

在類中的static數據成員或函數都是獨立於對像的。即只要程序一運行,類就已存在了,這時無論此類的對象是否存在,但這些static的成員都已存在了。spa

也就是說static成員只創建一次,在類產生時就創建了,與對象無關,但對象能夠訪問它。code

所以,在訪問static成員時,對象不必定存在,因此就不能訪問類的非static成員,所在在static函數中不能訪問非static成員,不然編譯器會報錯。對象

static的數據成員在開始時要初始化,因與對象無關,故在全局部分初始化此數據成員,初始化時不要帶上static關鍵字,但要帶上類名和做用域解析運算符。不然編譯器覺得是聲明的新變量。blog

static的函數成員在類外部定義時,也不要帶上static關鍵字。繼承

 

#include <iostream>
using namespace std;

class CBox
{
public:
    static int objcut;
    static int getcount();
    

    void printinfo() 
    {
       printf("getcount=%d\n",getcount());
    }
    CBox()
    {
        objcut++;  //對象產生時自動增長,代表產生對象的數量
    }
};

int CBox::objcut=0;//static 數據成員初始化,不要在前面加上static
int CBox::getcount() //類外部定義,必定要寫上類名和運算解析符
{
    return objcut;
}
void main()
{
  CBox box[6]; //對象數組
  printf("共有%d個對象產生.\n",CBox::objcut);
  box[1].printinfo();
  CBox cc;
   printf("共有%d個對象產生.\n",cc.getcount());
   printf("共有%d個對象產生.\n",cc.objcut);
   cc.objcut=100;
    printf("共有%d個對象產生.\n",cc.objcut);
}

由上可知,對象和類均可以訪問static成員,由於static成員屬於類的,對象繼承了類,故均可以訪問。作用域

 static函數不能訪問非static成員,但非static成員能夠訪問static成員,如get

void printinfo()函數。

實例顯示結果:

相關文章
相關標籤/搜索