一:讨论
有时我们希望某些常量只在类中有效。
(1) 由于#define 定义的宏常量是全局的,不能达到目的
(2)于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在的,但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。
并且不能在类声明中初始化 const 数据成员,const 数据成员的初始化只能在类构造函数的初始化表中进行。
二:可以的方法
(1)应该用类中的枚举常量来实现。
class A
{
enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量
int array1[SIZE1];
int array2[SIZE2];
};
枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如 PI=3.14159) 。
(2)static变量
static变量是属于类的,如果不是共有的,只能有static函数访问。
static变量只能在类的外面初始化,我一般是在头文件里面定义,在.cpp中初始化(赋初值)。