有時,使符號常量的作用域為類很有用:
class Bakery
{
private:
const int Months = 12; // declare a constant? FALSE
double costs[Months];
...
但這是行不通的,因為——宣告類只是描述了物件的形式,并沒有創建物件,因此,在創建物件前,將沒有用于存盤值的空間,
解決方案一:
——在類中宣告一個列舉
class Bakery
{
private:
enum {Months = 12};
double costs[Months];
...
- 在類宣告中宣告的列舉的作用域為整個類
- 用這種方式宣告列舉并不會創建類資料成員,也就是說,所有物件中都不包含列舉,
- Months只是一個符號名稱,在作用域為整個類的代碼中遇到它時,編譯器將用30來替換它
——使用static
class Bakery
{
private:
static const int Months = 12;
double costs[Months];
...
- 這將創建一個名叫Months的常量,該常量將與其它靜態變數存盤在一起,而不是存盤在物件中
- C++98中,只能使用這種技術宣告值為整數或列舉的靜態常量,而不能存盤double常量,C++11消除了這種限制
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17321.html
標籤:C++
上一篇:C++ 類作用域
下一篇:C++ 作用域內列舉
