中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++類常量和類枚舉怎么理解

發布時間:2022-01-04 00:36:41 來源:億速云 閱讀:160 作者:柒染 欄目:開發技術

這篇文章給大家介紹C++類常量和類枚舉怎么理解,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1.類常量

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

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

比如這樣:

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

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

C++類常量和類枚舉怎么理解

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

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

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

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

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

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

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

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

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

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

2.類枚舉

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

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

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

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

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

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

當我們使用的時候,需要加上解析運算符:

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

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

關于C++類常量和類枚舉怎么理解就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

固安县| 龙川县| 绥江县| 泽州县| 和林格尔县| 南康市| 来宾市| 信阳市| 明光市| 南漳县| 岱山县| 开封市| 邳州市| 托克逊县| 乌兰浩特市| 永城市| 大安市| 吉水县| 靖边县| 浏阳市| 泽普县| 南安市| 北碚区| 西安市| 晋州市| 鹤岗市| 龙岩市| 治县。| 奉新县| 瑞安市| 常州市| 庆安县| 寿阳县| 托克托县| 孙吴县| 高邑县| 镇巴县| 岳阳市| 潜江市| 龙江县| 商洛市|