c++ 作用域为类的常量

class Bakery

{

private:

const int Months = 12; //错误1

double costs[Month];

...

}


错误1 处 : 这个写法行不通 ,因为声明类只是描述啦对象的形式,, 并没有创建对象. 因此, 在创建对象前, 将没有用于储存值的空间 (摘抄自 c++ primer plus)


解决办法1:

class Bakery

{

private:

enum {Month = 12}; //ok

double costs[Month];

...

}

ok处: 用这种方式声明枚举 并不会创建类数据成员, 也就是说, 所有的对象都不包含枚举. 另外, Month 只是一个符号名称, 在作用域为整个类的代码中遇见他时, 编译器会用12代替它 (摘抄自 c++ primer plus)


ps:当出现这种情况的时候枚举将出现问题 

enmu egg {Small, Medium, Large};

enmu t_shirt {Small, Medium, Large};

egg Small 与t_shirt Small  在同一个作用域内 将发生冲突 

解决办法:

enmu class egg {Small, Medium, Large};

enmu class t_shirt {Small, Medium, Large};

或者

enmu struct egg {Small, Medium, Large};

enmu struct t_shirt {Small, Medium, Large};

使用以上两种需要用枚举明来限定枚举变量 ex:egg::Small  t_shirt::Large


解决办法2:

class Bakery

{

private:

static const int Month = 12;//ok

double costs[Month];

...

}

使用static const ,该常量将与其他的静态变量放在一起, 而不是储存在对象中.因此只会有一个Month常量, 被所有的Bakery 独享共享(摘抄自 c++ primer plus)


你可能感兴趣的:(C++)