最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++類常量和類枚舉

 更新時間:2022年01月03日 11:15:33   作者:梁唐  
這篇文章主要介紹了C++類常量和類枚舉,給類當(dāng)中定義一些常量,可以給所有類的對象使用,比如說我們在類當(dāng)中定義一個數(shù)組,希望可以定義一個常量,用來初始化數(shù)組的長度,那么下面我i嗎就來看看過程當(dāng)如何吧

文章轉(zhuǎn)自公眾號:Coder梁(ID:Coder_LT)

1.類常量

有的時候, 我們希望能給類當(dāng)中定義一些常量,可以給所有類的對象使用。

比如說我們在類當(dāng)中定義一個數(shù)組,希望可以定義一個常量,用來初始化數(shù)組的長度。既然是用來初始化數(shù)組長度的,那么這個值自然也不會改變,我們定義成const是否可行呢?

比如這樣:

class P {
? ? private:
? ? ?const int N=15;
? ? ?int costs[N];
? ? ...
}

很遺憾,這樣不行,編譯器會拋出一個錯誤:

說我們non-static變量N用的不對,看到了吧?報錯信息里的描述是non-static變量,也就是說我們這里定義的N不是一個static類型的,所以不能用來初始化數(shù)組。

那怎么樣才算對了呢?很簡單,我們可以定義成static變量就對了。

class P {
? ? private:
? ? ?static const int N=15;
? ? ?int costs[N];
? ? ...
}

也就是在const int前面加上了static關(guān)鍵字,表示這是一個static即靜態(tài)變量。這個常量會和其他靜態(tài)變量存儲在一起,而不是存儲在對象里,這樣的話也就被所有對象共享了。

對于像是JavaPython等其他語言來說,類中的靜態(tài)變量是可以通過類名直接訪問的,而C++中不行。

除了定義靜態(tài)變量之外,還有一種方法就是定義類枚舉:

class P {
? ? private:
? ? ?enum {N=15};
? ? ?int costs[N];
? ? ...
}

這樣也能運行,看起來非常不可思議。

通過這種方式聲明并不會創(chuàng)建類數(shù)據(jù)成員,對于類的對象來說,并不包含枚舉,這里的N只是一個符號名稱。在類當(dāng)中遇到它的時候,編譯器會用15來代替。

也正是因為我們只是為了創(chuàng)建符號常量,而不是創(chuàng)建枚舉類型的變量,所以不需要提供枚舉名。有一些C++的類庫當(dāng)中也用到了這種方法,比如ios_base::fixed等。

2.類枚舉

傳統(tǒng)的枚舉類型變量存在一定的問題,最大的問題是當(dāng)兩個枚舉定義中的枚舉量重名的時候,就會發(fā)生沖突:

enum A {small, big, medium};
enum B {small, large, xlarge};

這兩個枚舉類型當(dāng)中都有small,如果位于相同的作用于,那么就會發(fā)生沖突。

為了避免這個問題,C++11當(dāng)中提供了一種新枚舉,它的作用域為類,聲明類似這樣:

enum class A {small, big, medium};
enum class B {small, large, xlarge};

和上面的代碼幾乎是一樣的,只不過多了一個關(guān)鍵字class,換成struct也是可以的。

當(dāng)我們使用的時候,需要加上解析運算符:

A choice = A::small;
B c = B::large;

另外我們前面說過,常規(guī)的枚舉將自動轉(zhuǎn)化為整型,比如賦值給int變量或者是用于比較表達式的時候。而作用域內(nèi)枚舉不會隱式地轉(zhuǎn)換類型。

到此這篇關(guān)于C++類常量和類枚舉的文章就介紹到這了,更多相關(guān)C++類常量和類枚舉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

大洼县| 吴堡县| 垣曲县| 皮山县| 丰台区| 彰化县| 察雅县| 上栗县| 农安县| 新化县| 遂昌县| 鄢陵县| 洪雅县| 华阴市| 泊头市| 兰西县| 德化县| 郸城县| 惠水县| 陇南市| 涿州市| 长白| 麻江县| 沙湾县| 渑池县| 肥城市| 民权县| 罗源县| 张家界市| 广平县| 和田县| 金乡县| 卫辉市| 焦作市| 镇沅| 兰坪| 定陶县| 桃园市| 瑞昌市| 云南省| 正镶白旗|