C++類(lèi)的靜態(tài)成員初始化詳細(xì)講解
記?。?/FONT>通常靜態(tài)數(shù)據(jù)成員在類(lèi)聲明中聲明,在包含類(lèi)方法的文件中初始化.初始化時(shí)使用作用域操作符來(lái)指出靜態(tài)成員所屬的類(lèi).但如果靜態(tài)成員是整型或是枚舉型const,則可以在類(lèi)聲明中初始化!!!
#include <iostream>
using namespace std;
class test
{
public:
static int num;
};
int test::num = 0;
void main()
{
cout<<test::num <<endl;
test::num = 20;
cout<<test::num <<endl;
}
一般地靜態(tài)數(shù)據(jù)成員在該類(lèi)定義之外被初始化如同一個(gè)成員函數(shù)被定義在類(lèi)定義之外一樣,在這種定義中的靜態(tài)成員的名字必須被其類(lèi)名限定修飾,如上例中的
int test::num = 0;
與全局對(duì)象一樣對(duì)于靜態(tài)數(shù)據(jù)成員在程序中也只能提供一個(gè)定義,這意味著靜態(tài)數(shù)據(jù)成員的初始化不應(yīng)該被放在頭文件中而應(yīng)該放在含有類(lèi)的非inline函數(shù)定義的文件中, 靜態(tài)數(shù)據(jù)成員可以被聲明為任意類(lèi)型它們可以是const 對(duì)象數(shù)組或類(lèi)對(duì)象等等
#include <string>
class Account {
// ...
private:
static const string name;
};
const string Account::name("Savings Account");
作為特例有序型的const 靜態(tài)數(shù)據(jù)成員可以在類(lèi)體中用一常量值初始化, 例如如果決定用一個(gè)字符數(shù)組而不是string 來(lái)存儲(chǔ)賬戶(hù)的姓名那么我們可以用int型的const數(shù)據(jù)成員指定該數(shù)組的長(zhǎng)度例如:
// 頭文件
class Account {
// ...
private:
static const int nameSize = 16;//好像vc下不支持這樣
static const char name[nameSize];
};
// 文本文件
cons tint Account::nameSize;// 必需的成員定義
const char Account::name[nameSize]="Savings Account";
于這個(gè)特例有一些有趣的事情值得注意, 用常量值作初始化的有序類(lèi)型的const 靜態(tài)數(shù)據(jù)成員是一個(gè)常量表達(dá)式constant expression ,如果需要在類(lèi)體中使用這個(gè)被命名的值那么類(lèi)設(shè)計(jì)者可聲明這樣的靜態(tài)數(shù)據(jù)成員, 例如因?yàn)閏onst 靜態(tài)數(shù)據(jù)成員nameSize是一個(gè)常量表達(dá)式所以類(lèi)的設(shè)計(jì)者可以用它來(lái)指定數(shù)組數(shù)據(jù)成員name 的長(zhǎng)度, 在類(lèi)體內(nèi)初始化一個(gè)const 靜態(tài)數(shù)據(jù)成員時(shí)該成員必須仍然要被定義在類(lèi)定義之外
但是因?yàn)檫@個(gè)靜態(tài)數(shù)據(jù)成員的初始值是在類(lèi)體中指定的, 所以在類(lèi)定義之外的定義不能指定初始值, 因?yàn)閚ame 是一個(gè)數(shù)組不是有序類(lèi)型所以它不能在類(lèi)體內(nèi)被初始化, 任何試圖這么做的行為都會(huì)導(dǎo)致編譯時(shí)刻錯(cuò)誤例如:
class Account {
// ...
private:
static const int nameSize = 16;// ok: 有序類(lèi)型
static const char name[nameSize]= "Savings Account";// 錯(cuò)誤
};
name 必須在類(lèi)定義之外被初始化, 這個(gè)例子還說(shuō)明了一點(diǎn), 我們注意到成員nameSize指定了數(shù)組name 的長(zhǎng)度, 而數(shù)組name的定義出現(xiàn)在類(lèi)定義之外,
const char Account::name[nameSize] = "Savings Account";
nameSize 沒(méi)有被類(lèi)名Account 限定修飾. 盡管nameSize是私有成員, 但是name的定義仍沒(méi)有錯(cuò), 怎么會(huì)這樣? 如同類(lèi)成員函數(shù)的定義可以引用類(lèi)的私有成員一樣靜態(tài)數(shù)據(jù)成員的定義也可以引用靜態(tài)數(shù)據(jù)成員, name 的定義是在它的類(lèi)的域內(nèi)當(dāng)限定修飾名Account::name被看到之后它就可以引用Account 的私有數(shù)據(jù)成員。
上一篇:C#委托所蘊(yùn)含的函數(shù)指針概念詳細(xì)解析
欄 目:C語(yǔ)言
下一篇:關(guān)于C/C++中可變參數(shù)的詳細(xì)介紹(va_list,va_start,va_arg,va_end)
本文標(biāo)題:C++類(lèi)的靜態(tài)成員初始化詳細(xì)講解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4031.html
您可能感興趣的文章
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 01-10c語(yǔ)言求1+2+...+n的解決方法
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入理解約瑟夫環(huán)的數(shù)學(xué)優(yōu)化方法
- 01-10深入二叉樹(shù)兩個(gè)結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)- 解析最少換車(chē)次數(shù)的問(wèn)題詳解
- 01-10c語(yǔ)言 跳臺(tái)階問(wèn)題的解決方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什