10-6 类作用域

10.6 类作用域

在类中定义的名称的作用域是整个类,只在该类中是已知的。

10.6.1作用域为类的常量

例如:类声明可能需要使用字面值30来指定数组的长度。

class Brakery{
private:
const int MONTHS=12;//不可行!!
double costs[MONTHS];
...
}

但是,因为声明只是描述了对象的形式,并没有创建变量,因此类声明中没有存储值的空间。所以常量不能被赋值

处理方法

1.使用枚举

注意:因为枚举并不创建类数据成员,所以在类中声明的枚举不会在对象中出现。

class Brakery{
private:
enum {MONTHS=12};//使用枚举
double costs[MONTHS];
...
}

2.使用static

class Brakery{
private:
static const int MONTHS=12;
double costs[MONTHS];
...
}

该常量将与所有静态变量存储在一起,而不是存储在类中,所以能做到

10.6.2作用域内枚举(c++11)

传统枚举会因为两个枚举内的常量名称一致而引发冲突

作用域内枚举可以有效避免这个问题

enum class egg {Small,Medium,Large};//作用域egg
enum class t_shirt {Small,Medium,Large};//作用域t_shirt
egg choose = egg::Large;//注意加上作用域解析符::
t_shirt T=t_shirt::Large;

作用域内枚举不能隐式转化为整形