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