關鍵字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()函數。
實例顯示結果: