有時,使符號常量的作用域為類很有用: class Bakery { private: const int Months = 12; // declare a constant? FALSE double costs[Months]; ... 但這是行不通的,因為——聲明類只是描述了對象的形式,並沒有 ...
有時,使符號常量的作用域為類很有用:
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消除了這種限制