在类中定义的名称(函数或数据成员)的作用域都是整个类,作用域为整个类的名称只在该类中是已知的,在类外是不可知的。

符号常量的作用域为类很有用,创建一个由所有对象共享的常量是个不错的主意。

因为声明类只是描述了对象的形式,并没有创建对象。因此,在创建对象之前,将没有用于存储值的空间。常规的声明常量的方法是不可用的。

怎么办呢?有两种方法:

1、在类中声明一个枚举。

class A{
private:enum {num = 12};double conts[num];...

用这种方法声明不会创建类成员数据,所有的对象中都不包含枚举。num只是一个符号名称,在作用域为整个类的代码中遇到它,编译器将用12来代替。

这里只是创建符号常量,并不打算创建枚举类型的变量,因此不需要提供枚举名。

2、使用关键字 static

class A{
private:static const int num = 12;double conts[num];...

会创建一个名为 num 的常量,该常量和其他静态变量存储在一起,而不是存储在对象中。因此,只有一个 num 常量,被所有 A 对象共享。

3、作用域内枚举

两个枚举中定义的枚举量可能发生冲突:

enum egg { s, m, l, J }
enum shirt { s, m, l, X }

这将出现冲突,将其作用域声明为类即可:

enum class egg { s, m, l, J }
enum class shirt { s, m, l, X }

也可用关键字 struct 代替 class,用枚举名称来限定枚举量:

egg choice  =egg::l;
shirt choice = shirt :: l

枚举量的作用域为类后,就不会发生冲突了。

C++作用域为类的常量相关推荐

  1. C++类的常量数据成员,静态数据成员,常量静态数据成员,枚举类型

    文章目录 C++类的常量数据成员,静态数据成员,常量静态数据成员 const成员 static成员 静态整型常量数据成员 C++枚举类型 C++中作用域受限的枚举类型 经典做法 C++11的枚举类 C ...

  2. java的知识点15——String基础、String类和常量池、String类常用的方法、字符串相等的判断、组合模式

    String基础 1. String类又称作不可变字符序列. 2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类. 3. Java字符串就是Unicode ...

  3. PyQt5 技巧篇-增加一个类级变量,类级变量的设置方法,类级“常量“设置方法

    如果想增加一个全局变量来用的话,请看这篇文章: Python全局变量引用设置方法 方法一: 直接设定类级变量. setupUi(args) 是界面运行一定会执行的,所以在这里给self绑定变量,整个类 ...

  4. c/c++中全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域的区别与联系

    C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 全局变量具有全局作用域.全 ...

  5. JAVA中常量使用常量类或者常量接口还是使用枚举,错误代码和中文可变信息的枚举实现

    文章目录 关于"JAVA中常量使用常量类或者常量接口还是使用枚举",已有定论-使用枚举,原因就不再展开了. 借助java枚举,可以在定义错误名称和代码的同时,定义中文描述信息,但是 ...

  6. java 枚举常量_java中的枚举类和常量类区别在哪儿?

    假如有一笔业务需要审核,审核状态分:未审核,审核中,审核通过,审核不通过.我们在程序里是否可以直接这么写: if(state==1){//1代表未操作 //操作 }else{ //...... } 将 ...

  7. 四次方程根式解+四次以上方程近似解的js实现代码(上)——复数类+复数常量+三角函数简表

    本人正在写矩阵史诗级玩法系列博客,写到求二元二次方程组的地方来了,消元后最高会生成一元四次方程,而这个求根公式虽然成熟,但代码量也不少,所以单独封装成工具类. 本不打算讲解的,但考虑到有的朋友可能没接 ...

  8. java enum类默认常量是什么_Java枚举类型enum的详解及使用

    Java枚举类型enum的详解及使用 最近跟同事讨论问题的时候,突然同事提到我们为什么Java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前 ...

  9. PHP类 const常量访问方法例子

    在php面向对象之final的应用中,讲到了PHP面向对象常用的修饰符final的应用,接下来讲到PHP面向对象中常用的常量修饰符const. 我们知道,在PHP中定义常量是通过define()函数来 ...

最新文章

  1. TensorFlow+TVM优化NMT神经机器翻译
  2. 【GoLang】tcmalloc jemalloc
  3. 到底应该选择哪种Linux.NET的部署方式?
  4. 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)
  5. C#开发VS LUA开发
  6. django 1.8 官方文档翻译:8-5 加密签名
  7. (14)Node.js 核心模块—http
  8. 树莓派 4 与英伟达 Jetson Nano 性能大比拼,谁是最佳的嵌入式“电脑”?
  9. Linux环境Eclipse + Tomcat + MySQL 构造J2EE方法开发环境
  10. 28.go fmt 与 gofmt
  11. 高等数学(第七版)同济大学 习题2-5 个人解答
  12. javascript用DOM解释XML
  13. 解决电脑启动蓝屏出现Recovery—错误代码0xc000014
  14. CRACK小试牛刀:关于GALGAME银色遥远爆破记录
  15. 绘制3d散点图报错ax = fig.gca(projection = ‘3d‘)TypeError: gca() got an unexpected keyword argument
  16. 【原创】三星、镁光、海力士内存颗粒命名规则摘录
  17. cartographer源码解析(二)node_main.cc文件详解
  18. Unity animation动画编辑器快捷键
  19. 【Python高级技能】超炫酷,电脑每天自动换壁纸,这个神器适合你。
  20. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用

热门文章

  1. Nginx配置upstream实现负载均衡
  2. windows下vim高亮systemverilog
  3. Spring 梳理 - ContentNegotiatingViewResolver
  4. Maven内置变量说明
  5. django2.0集成xadmin0.6报错集锦
  6. (树)判断二叉树是否为BST
  7. 数学之旅-不动点定理
  8. Ghost后只有一个C盘解决方法(转)
  9. 怎样做反向域名解析?
  10. sd卡 写卡阻塞_Sony a7r4写卡速度测试