靜態類成員就是不管這個類是否有已例項化的物件存在,這個成員都一直存在。
也就是說,靜態類成員是繫結在類上的,而不是繫結在物件上的。
宣告靜態類成員的方式就是在函式前加入static關鍵字。
靜態類成員通常適用於當乙個類的所有物件之間需要共享同乙份資料的時候,這樣子能節省空間,提高效率。
在c++11之前,只有int或者enum型別能在宣告的時候被初始化。(但是c++11及以後則不存在這個問題)
如何訪問靜態資料成員?
對於public的靜態資料成員,我們只需要用類似於
test::data
這樣子的格式來訪問即可。
對於private或者protected的靜態資料成員,我們需要為他們建立乙個靜態成員函式來返回他們的值。同樣的,靜態成員函式是繫結在類上而不是在物件上的。
**:employee.h
#pragma once
#includeclass employee
;
employee.cpp
#include "employee.h"
#includeusing namespace std;
//define and initialize static data member at global namespace scope
unsigned int employee::count = 0;//cannot include keyword static
//define static member function that returns number of
//employee objects instantiated (declared static in employee.h)
unsigned int employee::getcount()
//constructor initializes non-static data members and
//increment static data member count
employee::employee(const string& first, const string& last)
:firstname(first),lastname(last)
employee::~employee()
//return first name of employee
string employee::getfirstname()const
string employee::getlastname()const
main.cpp
#include#include"employee.h"
using namespace std;
int main()
//end nested scope in main
//no objects exist, so call static member function getcount again
//using the class name and the scope resolution operator
cout << "\nnumber of employees after objects are deleted is "
<< employee::getcount() << endl;
}
特別的,對於main.cpp中,用一對大括號括起來的**塊,他們的變數作用域只是這個塊之中,當這一塊結束之後,裡面的資料成員也就被清理了。![](https://pic.w3help.cc/97e/3597b8a1c902e7b1f7938a2d0927c.jpeg)
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...