#include <iostream> using namespace std; class A { public: A(int size) : SIZE(size) {}; private: const int SIZE; }; int main() { A a(100); }
說明
- 在類中聲明變量為const類型,但是不可以初始化
- const常量的初始化必須在構造函數初始化列表中初始化,而不可以在構造函數函數體內初始化
但是
此時的const變量屬於具體的一個對象,如何在整個類中都恆定不變呢?
答案是利用枚舉,舉例
#include <iostream> using namespace std; class A { private: enum {SIZE = 100}; public: int array[SIZE]; }; int main() { A a; }
枚舉常量不會占據對象的存儲空間,在編譯時被全部求值
但是,它隱含的數據對象類型為整形,不能表示其他類型。
問題
如何定義在類中定義非整形常量?(待解決)
話說有幾個地方必須在構造函數的初始化列表中:
- 類的const常量
- 類的引用類型成員
- 沒有默認構造函數的類類型成員
- 如果類存在繼承關系,派生類必須在其初始化列表中調用基類的構造函數