引言:
有時類需要它的一些成員與類本身直接相關,而不是與類的各個物件保持關聯。例如,乙個銀行賬戶可能需要乙個資料成員來表示當前的基準利率。此時我們就期望利率與類關聯,沒必要每個物件都儲存利率資訊。而且一旦利率浮動,我們希望所有的物件都能使用新值。
宣告靜態成員變數:
成員前加關鍵字: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、作用域運算子直接訪問
2、類的物件、引用或指標double r;
r = account::
rate()
;
定義靜態成員: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時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...