我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++类常量和类枚举

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++类常量和类枚举

文章转自公众号:Coder梁(ID:Coder_LT)

1.类常量

有的时候, 我们希望能给类当中定义一些常量,可以给所有类的对象使用。

比如说我们在类当中定义一个数组,希望可以定义一个常量,用来初始化数组的长度。既然是用来初始化数组长度的,那么这个值自然也不会改变,我们定义成const是否可行呢?

比如这样:

class P {
    private:
     const int N=15;
     int costs[N];
    ...
}

很遗憾,这样不行,编译器会抛出一个错误:

说我们non-static变量N用的不对,看到了吧?报错信息里的描述是non-static变量,也就是说我们这里定义的N不是一个static类型的,所以不能用来初始化数组。

那怎么样才算对了呢?很简单,我们可以定义成static变量就对了。

class P {
    private:
     static const int N=15;
     int costs[N];
    ...
}

也就是在const int前面加上了static关键字,表示这是一个static即静态变量。这个常量会和其他静态变量存储在一起,而不是存储在对象里,这样的话也就被所有对象共享了。

对于像是JavaPython等其他语言来说,类中的静态变量是可以通过类名直接访问的,而C++中不行。

除了定义静态变量之外,还有一种方法就是定义类枚举:

class P {
    private:
     enum {N=15};
     int costs[N];
    ...
}

这样也能运行,看起来非常不可思议。

通过这种方式声明并不会创建类数据成员,对于类的对象来说,并不包含枚举,这里的N只是一个符号名称。在类当中遇到它的时候,编译器会用15来代替。

也正是因为我们只是为了创建符号常量,而不是创建枚举类型的变量,所以不需要提供枚举名。有一些C++的类库当中也用到了这种方法,比如ios_base::fixed等。

2.类枚举

传统的枚举类型变量存在一定的问题,最大的问题是当两个枚举定义中的枚举量重名的时候,就会发生冲突:

enum A {small, big, medium};
enum B {small, large, xlarge};

这两个枚举类型当中都有small,如果位于相同的作用于,那么就会发生冲突。

为了避免这个问题,C++11当中提供了一种新枚举,它的作用域为类,声明类似这样:

enum class A {small, big, medium};
enum class B {small, large, xlarge};

和上面的代码几乎是一样的,只不过多了一个关键字class,换成struct也是可以的。

当我们使用的时候,需要加上解析运算符:

A choice = A::small;
B c = B::large;

另外我们前面说过,常规的枚举将自动转化为整型,比如赋值给int变量或者是用于比较表达式的时候。而作用域内枚举不会隐式地转换类型。

到此这篇关于C++类常量和类枚举的文章就介绍到这了,更多相关C++类常量和类枚举内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++类常量和类枚举

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++类常量和类枚举怎么理解

这篇文章给大家介绍C++类常量和类枚举怎么理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.类常量有的时候, 我们希望能给类当中定义一些常量,可以给所有类的对象使用。比如说我们在类当中定义一个数组,希望可以定义一个
2023-06-22

java怎么定义枚举常量类

在Java中,可以使用enum关键字定义枚举常量类。以下是定义枚举常量类的示例代码:public enum Weekday {MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDA
2023-10-24

C#枚举类型举例分析

本篇内容主要讲解“C#枚举类型举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型举例分析”吧!C#枚举类型实例演示/* * Created by SharpDevelop.
2023-06-17

枚举类

当需要定义常量时,一个办法是用大写变量通过整数来定义好处是简单,缺点是类型是int,并且仍然是变量Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较,这样这些相关常量就不会变化了   使用枚举类
2023-01-31

详解Java枚举与接口常量和类常量的区别

这篇文章主要为大家详细介绍了Java中枚举与接口常量、类常量有什么区别,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的可以了解一下
2022-11-13

C#枚举类型怎么用

这篇文章主要为大家展示了“C#枚举类型怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#枚举类型怎么用”这篇文章吧。C#枚举类型使用的时候需要掌握的有哪些方面呢?首先我们来看看一个例子:p
2023-06-17

C#枚举类型的语法

本篇内容主要讲解“C#枚举类型的语法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型的语法”吧!C#枚举类型语法是什么呢?让我看看下面的讲解:/*C#枚举 *當你想讓一組數字代表特定
2023-06-17

C#枚举类型的应用

这篇文章主要讲解了“C#枚举类型的应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#枚举类型的应用”吧!C#枚举类型应用是怎么样的呢?首先我们来看看几个问题:◆C#枚举类型与基础类型的转
2023-06-17

python枚举类型

笔记:一:枚举类型的定义二:枚举类和普通类的区别 1:值不可变 2:具有防止相同标签得功能,不同标签的值可以相同!三:枚举类型、枚举值、枚举名称 1:VIP.YELLOW.Value 获得标签的值 2:VIP.BL
2023-01-30

C#枚举类型怎么使用

本篇内容介绍了“C#枚举类型怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#枚举,枚举是一种值类型,由许多名字的常量(也叫枚举表)
2023-06-17

C++的枚举类型怎么定义

这篇文章主要介绍了C++的枚举类型怎么定义的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++的枚举类型怎么定义文章都会有所收获,下面我们一起来看看吧。C++枚举类型enum表示枚举,通常用于定义个新类型的字符
2023-06-27

C#枚举类型的基础讲解

本篇内容主要讲解“C#枚举类型的基础讲解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型的基础讲解”吧!对于C#枚举类型不仅可以提高程序的可读性,而且可以减少因底层值发生改变而导致的程
2023-06-18

C# 枚举类型的声明和使用方法

本篇内容主要讲解“C# 枚举类型的声明和使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C# 枚举类型的声明和使用方法”吧!目录前言相关介绍一、枚举声明二、声明位置三、枚举使用前言学习记录
2023-06-20

C#枚举类型的实例分析

本篇内容主要讲解“C#枚举类型的实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型的实例分析”吧!C#枚举类型实例是你学习C#枚举类型的捷径,那让我们开始吧:public enu
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录