什麼是靜態成員變數?又為什麼出現?
在c語言中稱之為靜態變數,因為c++中增加了類的概念,所以稱之為靜態成員變數。
宣告方式 (在一般變數的宣告前加上static):static int/char a
作用:
static 修飾的變數在它所在的函式生存期結束後在該函式體內部依然儲存其原有的值 (看個小例子);
#include using namespace std;
int main()
i = 0; cout << endl;
while(i<10)
// cout << b << endl;
// cout << c << endl;
return 0;
}
對於c++,當static用來修飾類的成員變數的時候,也會起到相同的效果,即在類中該變數如果不被再次單獨賦值,
值都會保持不變。
這裡由問題引入:
首先我們定義乙個點類 (point),在以前的文章中已經談到怎麼去求兩點之間的距離 (傳送門
) ,但這裡會出現乙個新的問題:
如何統計所有建立的點的個數?
這時在類中直接定義乙個int count;
就行不通了,因為每次呼叫類來建立點的時候這個變數都沒有值,此刻就要使用到static靜態成員變數:
1> 首先來建乙個點類 (point) :
class point
void count()
private:
int x,y;
static int count;
};
這個時候就會發現:
要在什麼地方去給這個靜態成員變數賦初值呢?類內部還是外部?
答案是在外部賦值;
2> 然後我們來建立點,但是接下來想要輸出的是靜態變數,寫輸出函式還是用一般格式?(試一下)
#include using namespace std;
class point
int getcount()
private:
int x,y;
static int count;
};int point::count = 0;
int main()
?到這裡我們就會發現了乙個新的問題:
輸出count的時候必須要指定類的物件才可以,怎麼那麼麻煩,而且如果沒有物件,
就沒法輸出0了 (物件終究是個大問題~~),0沒法輸出了~那有沒有辦法可以不用物件直接輸出count呢?
就比如直接指明類名就可以了?
bingo!下面講靜態成員函式
直接對上面的原始碼稍作修改即可,下面附上原始碼:
#include using namespace std;
class point
static int getcount()
private:
int x,y;
static int count;
};int point::count = 0;
int main()
最快的腳步不是跨越,而是繼續,最慢的步伐不是小步,而是徘徊。 C 靜態成員變數與靜態成員函式
類的靜態成員有兩種 靜態成員變數和靜態成員函式,語法是在普通成員變數和成員函式前加static關鍵字。0 定義class crect 1 存在原因 靜態成員變數在本質上是全域性變數。乙個類,哪怕乙個物件都不存在,其靜態成員變數也是存在的。靜態成員函式並不需要作用在某個具體的物件上,因此本質上是全域性...
c 靜態成員變數與靜態成員函式
普通成員變數每個物件各自持有乙份,而靜態成員變數只有乙份,被所有同類物件共享 普通成員函式一定是作用在某個物件上的,而靜態成員函式並不具體作用在某個物件上 訪問方式 訪問普通成員時,要通過物件名.成員名的方式,指明要訪問的成員變數是屬於哪個物件的,或要呼叫的成員函式作用於哪個物件 訪問靜態成員時,則...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...