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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值