C 類的靜態成員

2021-10-24 20:15:49 字數 1618 閱讀 4306

引言:

有時類需要它的一些成員與類本身直接相關,而不是與類的各個物件保持關聯。例如,乙個銀行賬戶可能需要乙個資料成員來表示當前的基準利率。此時我們就期望利率與類關聯,沒必要每個物件都儲存利率資訊。而且一旦利率浮動,我們希望所有的物件都能使用新值。

宣告靜態成員變數:

成員前加關鍵字:static。

靜態成員可以是public 或 private的。型別可以是常量、指標、引用、類型別等。

靜態成員函式也不與任何物件繫結,它們不包含this指標。因此,不能宣告為const 的,而且也不能在static 函式體內使用this 指標。

// 小栗子: 銀行賬戶記錄

class

account

;// 成員函式不通過作用域運算子就可直接訪問靜態成員:interestrate 。

static

double

rate()

static

void

rate

(double);

private

: std::string owner;

double amount;

static

double interestrate;

static

double

initrate()

;}

使用類的靜態成員:

1、作用域運算子直接訪問

double r;

r = account::

rate()

;

2、類的物件、引用或指標

account ac1;

account *ac2 =

&ac1;

r = ac1.

rate()

;// 通過account物件或引用;

r = ac2-

>

rate()

;// 通過指向account物件的指標;

定義靜態成員:
// 和類的所有成員一樣,但我們指向類外部的靜態成員,必須指明成員所屬的類名。

void account::

rate

(double newrate)..

.double account::interestrate =

initrate()

;

注意:

因為靜態成員不屬於類的任何乙個物件,所以它們不是在建立物件時定義的。這意味著它們不是由類的建構函式初始化的。一般來說,我們不應在類的內部初始化靜態成員。和其他物件一樣,乙個靜態資料成員只能定義一次。且一旦被定義,就一直存在於整個生命週期中(類似於全域性變數)。

// period 是常量表示式,用於定義daily_tbl 的維度;

static

constexpr

int period =20;

double daily_tbl[period]

;

與普通相比:
class

bar

class

screen

C 類靜態成員與類靜態成員函式

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

C 類靜態成員與類靜態成員函式

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

C 類靜態成員與類靜態成員函式

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