靜態成員函式與非靜態成員函式的區別

2021-10-12 14:02:28 字數 1046 閱讀 3878

先放上幾個小例子

1、static 修飾成員變數

靜態變數,是在編譯階段就分配空間,物件還沒有建立時,就已經分配空間。

靜態成員變數必須在類中宣告,在類外定義。

靜態資料成員不屬於某個物件,在為物件分配空間中不包括靜態成員所佔空間。

class data

;//定義的時候 不需要加static

int data::data=100;//類外定義+初始化

void test01()

};//定義的時候 不需要加static

int data::data=100;//類外定義+初始化

void test01()

//靜態成員函式 屬於類 而不屬於物件

static int getdatastatic(void)

};//定義的時候 不需要加static

int data::data=100;//類外定義+初始化

void test01()

{ //cout《注意:

1、靜態成員函式的目的 操作靜態成員資料。

2、靜態成員函式 不能訪問 非靜態成員資料。(靜態成員函式內部沒有this指標)

3、普通成員函式 可以操作 靜態成員資料 非靜態成員資料。

4、靜態成員變數 和 靜態成員函式 都有許可權之分。

成員函式:無論靜態函式還是非靜態函式,

都是屬於類的(這一點與資料成員的靜態非靜態不同),

物件並不擁有函式的拷貝.

兩者的區別在於:

非靜態的函式由類物件(加.或指標加->;)呼叫,

這時將向函式傳遞this指標.而靜態函式由類名(:?(或物件名.)呼叫,

但靜態函式不傳遞this指標,不識別物件個體,

所以通常用來對類的靜態資料成員操作.

類的靜態成員(變數和方法)屬於類本身,

在類載入的時候就會分配記憶體,

可以通過類名直接去訪問;

非靜態成員(變數和方法)屬於類的物件,

所以只有在類的物件產生(建立類的例項)時才會分配記憶體,

然後通過類的物件(例項)去訪問。

靜態成員函式和非靜態成員函式的區別?

乙個靜態成員函式不與任何物件相聯絡,故不能對非靜態成員進行預設訪問。它們的根本區別在於靜態成員函式沒有this指標,而非靜態成員函式有乙個指向當前物件的指標this。例如 1 classsc2 89void f sc s 10函式nsfn 可被認為它宣告為void sc nsfn sc this i...

靜態成員函式和非靜態成員函式的區別?

乙個靜態成員函式不與任何物件相聯絡,故不能對非靜態成員進行預設訪問。它們的根本區別在於靜態成員函式沒有this指標,而非靜態成員函式有乙個指向當前物件的指標this。例如 1 classsc2 89void f sc s 10 函式nsfn 可被認為它宣告為void sc nsfn sc this ...

C 靜態成員函式訪問非靜態成員

如果類沒有被建立,則沒有對應的成員,也就無法訪問 下面這種方法需要先建立類,並將類作為引數傳遞給靜態成員函式才能訪問。include using namespace std class person class student public person static void get age st...