靜態成員遵守訪問許可權的限定規則。
static type dataname;
靜態成員資料時屬於類的,整個類只有乙份拷貝,相當於類的全域性變數,供該類所有物件共用,能夠被該類的所有物件所訪問;非靜態成員資料是屬於物件的,每個物件都有非靜態成員資料的乙份拷貝,為該物件專用。
靜態成員函式也是屬於整個類的,它只能訪問屬於該類的靜態成員(包括靜態成員資料和靜態成員函式)。
在類的宣告中將資料成員指定為靜態成員,只是一種宣告,並不會為該資料成員分配記憶體空間,在使用之前應該對它進行定義。靜態資料成員常常在類外進行定義:
型別 類名::靜態成員名
型別 類名::靜態成員名=初始值;
例如:
#include
using
namespace
std;
class a
};int a::a = 1;
int main ()
注意:
1、在類外定義資料成員時,不能加上static限定詞;
2、在定義靜態資料成員時可以指定初始值,若沒有則預設為0.
原則上類的靜態資料成員必須在類外定義,否則就會出錯,若沒有,則會在定義該類的第乙個物件時定義相關的靜態資料成員,即為所有的靜態資料成員分配記憶體空間,並初始化為0。
換句話說,靜態成員和全域性變數一樣,只是編譯器將其限制在類作用域內了。
靜態成員屬於整個類,如果將它定義為類的公有成員,就可在類外用下面兩種方式訪問:
1、通過類名訪問(非靜態不可以)
類名::靜態資料成員名;
類名::靜態成員函式名( );
2、通過物件訪問
物件名.成員名
例如:
乙個book類,每乙個物件表示一本書。書的總本數和總**會動態變化,如果不將其設定為靜態資料成員,只有通過全域性變數才能實現這樣的功能,但全域性變數會破壞類的封裝性,給程式維護帶來負擔,也可能會誤改。因為靜態成員函式屬於整個類,不論通過哪個物件呼叫到的靜態成員函式都是相同的,因此建議通過以 類名::靜態成員函式名( ); 的方式來呼叫以區別普通成員函式。
說明:
1、靜態成員函式可以在類內部或外部定義,還可以定義成內聯函式;
2、靜態函式只能訪問靜態成員;
3、在類外定義靜態成員函式時,不能加上static限定詞;
4、靜態成員函式可以在定義類的任何物件之前被呼叫,非靜態成員只有在定義物件後,通過物件才能訪問。
補充文章
C 靜態成員變數,靜態成員函式
資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜...
C 靜態成員 2 靜態資料成員
目錄 1.靜態成員的構造 2.靜態成員的訪問 3.靜態成員的初始化 include class a class b int main 輸出 b s constructor called 結論 程式只呼叫了b的建構函式,而沒有呼叫a的建構函式。原因很簡單,靜態成員僅僅在類宣告的時候而宣告,但是不會定義...
C 靜態成員和靜態成員函式
一 靜態資料成員 類體中的資料成員的宣告前加上static關鍵字,該資料成員就成為了該類的靜態資料成員。和其他資料成員一樣,靜態資料成員也遵守public protected private訪問規則。同時,靜態資料成員還具有以下特點 1 靜態資料成員的定義。靜態資料成員實際是類域中的全域性變數,其定...