class Widget { // 這個放在頭檔案里
private:
static const int TotalNum = 5; // 注意static
int arr[TotalNum];
...
};
const int Widget::TotalNum; // 這個放在實作檔案里
// 注意沒有賦值
解讀:
因為這個常量的作用域是在Widget類里,因此TotalNum定義在類里,稱類專屬常量;
static: 為了確保常量只有一份物體,因此要加static;
const int Widget::TotalNum; 對這句話,如果TotalNum是static又是int/char/bool,其實可以不寫.....但還是寫吧,,,
實作檔案中的定義沒有賦值:因為已經在頭檔案的宣告中給了初值,就不能再給;
此外:
上述代碼可能不被舊的編譯器支持,萬一不行就把 = 5 挪到實作那句話里,如下:
class Widget { // 這個放在頭檔案里
private:
static const int TotalNum;
...
};
const int Widget::TotalNum = 5; // 這個放在實作檔案里
但假如頭檔案包含 int arr[TotalNum], 也就是說頭檔案需要5這個初值,那就改用enum:
class Widget { // 這個放在頭檔案里
private:
enum { TotalNum = 5 };
int arr[TotalNum];
...
};
既然提到enum就說說enum
enum有點像#define, 不像const,比如不能取enum地址,這樣enum定義的整數就不會被指標或參考取到,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/385893.html
標籤:其他
下一篇:C語言實作學生成績管理系統
