c++ 作用域为类的常量
2016-03-23 18:08
197 查看
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)
{
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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性