更多信息請?jiān)L問:考試吧計(jì)算機(jī)類論壇
(1)為什么需要類靜態(tài)成員?
有時(shí)候某個類的多個對象需要訪問一個全局對象,在這種情況下“提供一個全局對象”比“每個類都維持一個獨(dú)立的數(shù)據(jù)成員”要更為有效。而類靜態(tài)成員與全局變量相比,又有兩點(diǎn)好處:(a)不存在與程序中其他全局名字沖突的可能性;(b)可設(shè)置為private,實(shí)現(xiàn)信息隱藏。
(2)類靜態(tài)成員的特點(diǎn)
對于非靜態(tài)數(shù)據(jù)成員,每個類對象都有自己的拷貝,而靜態(tài)數(shù)據(jù)成員對每個類類型只有一個拷貝。由于靜態(tài)數(shù)據(jù)成員分配在全局?jǐn)?shù)據(jù)區(qū),因此在程序開始運(yùn)行時(shí)就必須存在,故靜態(tài)數(shù)據(jù)成員的空間分配和初始化不可能在main函數(shù)或其他函數(shù)中完成(因而在局部類中也不允許出現(xiàn)靜態(tài)數(shù)據(jù)成員)。這樣一來,靜態(tài)數(shù)據(jù)成員的空間分配和初始化只可能有以下三種途徑:(a)類的頭文件:這里有類的聲明。但存在一個無法回避的問題:對于靜態(tài)數(shù)據(jù)成員,在程序中也只能存在一個定義,而類的頭文件可能被重復(fù)引用而出現(xiàn)重復(fù)定義;(b)main函數(shù)前的全局?jǐn)?shù)據(jù)聲明和定義處:這種方法也有問題,每一個使用該類的程序都必須在此處定義一下該類的靜態(tài)成員,這是不現(xiàn)實(shí)的;(c)類定義的內(nèi)部實(shí)現(xiàn):這是最為理想的方式,引用時(shí)只需包含頭文件即可。
#include "account.h"
double Account::_interestRate = 0.05
(3)類靜態(tài)成員的定義
在對靜態(tài)數(shù)據(jù)成員進(jìn)行定義時(shí)有以下幾點(diǎn)注意事項(xiàng):(a)在類定義之外定義時(shí),靜態(tài)成員的名字必須被其類名限定修飾,前不可再添加static;(b)像int等有序類型的靜態(tài)數(shù)據(jù)成員可在類定義中初始化,但仍需在類定義外進(jìn)行定義,但此時(shí)已不能指定初始值;
相關(guān)推薦:計(jì)算機(jī)二級C++實(shí)例:Qt中解決亂碼的方法北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |