由關鍵字static修飾說明的類成員,成為靜態類成員(static class member)。雖然使用static修飾說明,但與函式中的靜態變數有明顯差異。類的靜態成員為其所有物件共享,不管有多少物件,靜態成員只有乙份存於公用記憶體中。類的靜態成員分為靜態成員變數和靜態成員函式。
在類定義中,用關鍵字static修飾的資料成員為靜態資料成員。
該類產生的所有物件共享系統為靜態成員分配的乙個儲存空間,而這個儲存空間是在編譯時分配的,在定義物件時不再為靜態成員分配空間,即靜態成員的大小不佔物件的空間。
靜態資料是該類所有物件所共有的,可提供同一類的所有物件之間資訊交換的捷徑。
靜態成員變數的初始化是在類外初始化,初始化的語法為
型別名 類名::變數名 = 值
1 類名::靜態資料成員名
2 通過類例項化出的物件來進行訪問
3 通過成員函式來進行訪問(靜態函式、非靜態函式都可以)
#include
#include
#include
#include
using
namespace std;
class
maker
void
show()
static
void
print()
public
:static
int count;
// 靜態資料成員
private
:int data;};
int maker::count =0;
// 靜態資料成員類外初始化
intmain()
函式成員說明為靜態,將與該類的不同物件無關,與靜態資料成員相反,為使用方便,靜態函式成員多為公有的,靜態函式的呼叫與靜態變數的呼叫類似,在物件之外
可以通過作用域運算子進行呼叫
類名::函式名(引數)
乙個常規的成員函式宣告描述了三件在邏輯上相互不同的事情
1、該函式能訪問類宣告的私用部分
2、該函式位於類的作用域之中
3、該函式必須經由乙個物件去啟用(有乙個this指標)
但是通過將函式宣告為static,可以讓它只有前兩種性質,即靜態成員函式由同一類的所有物件共享,它不具有指向某一具體物件的this指標,即不能通過靜態函式訪問普通的成員變數和成員函式,靜態函式只能管理類中的靜態成員和靜態函式
class
maker
void
show()
static
void
print()
public
:static
int count;
private
:int data;};
int maker::count =
0;
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...