c 靜態資料成員

2021-09-25 16:30:11 字數 1219 閱讀 5232

1.靜態資料成員的定義

class test

;

靜態資料成員在類內只能宣告,不能定義.

宣告格式為:static 資料型別 變數名

要對靜態資料成員定義和初始化必須在類的外面也就是在全域性作用域中定義,如果定義不給出初值,則預設初值為0。

靜態資料成員可以初始化,但只能在類體外初始化。格式:

資料型別 類名::靜態資料成員名 = 初值;

不必在初始化語句中加static。

注意:不能用引數初始化表對靜態資料成員初始化。

靜態資料成員的注意點

1.靜態資料成員被類的所有物件共享,包括該類的派生類物件,基類物件和派生類物件共享基類的靜態資料成員

class base;

class derived : public base;

//int test::a;如果這樣定義不賦予初值則初值為零

int base::a;

#include int main()

2.靜態資料成員可以作為成員函式的預設形參,而普通資料成員則不可以

3.靜態資料成員的型別可以是所屬類的型別,而普通資料成員則不可以。普通資料成員的只能宣告為 所屬類型別的 指標或引用

4.靜態資料成員在const函式中可以修改,而普通的資料成員是萬萬不能修改

class test

//靜態資料成員

static int a;//正確

int b;

void test() const };

int test::a;

const修飾的時當前this指標所指向的物件是const,但是靜態資料成員不屬於任何類的物件,它被類的所有物件修改,所以this指標不修飾靜態的資料成員,所以可以更改。

5.靜態資料成員為所有同類物件所共有,不只是屬於某乙個物件。因為靜態資料物件在記憶體中只占用乙份空間,如果改變了它,那麼各個物件的資料成員的值都改變了,可以節約空間和效率。它不隨著物件的建立而分配空間,也不隨著物件的撤銷而釋放。靜態資料成員是在程式編譯時被分配空間的,到程式結束時才釋放。

6.有了靜態資料物件,物件之間的資料有了溝通的渠道,實現資料共享,因此可以不使用全域性變數。靜態資料成員的作用域是該類,而不是全域性。

C 靜態成員 2 靜態資料成員

目錄 1.靜態成員的構造 2.靜態成員的訪問 3.靜態成員的初始化 include class a class b int main 輸出 b s constructor called 結論 程式只呼叫了b的建構函式,而沒有呼叫a的建構函式。原因很簡單,靜態成員僅僅在類宣告的時候而宣告,但是不會定義...

C 靜態成員函式和靜態資料成員

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 靜態資料成員與靜態成員函式

一般情況下,如果有n個同類的物件,那麼每乙個物件都分別有自己的資料成員,不同物件的資料成員各自有值,互不相干。但是有時人們希望有某乙個或幾個資料成員為所有物件所共有,這樣可以實現資料共享。可以使用全域性變數來達到共享資料的目的。例如在乙個程式檔案中有多個函式,每乙個函式都可以改變全域性變數的值,全域...