23枚举类型

简介: 23枚举类型

C++入门——60s从0到1

枚举类型

 

枚举类型是一种用户自定义的数据类型,它允许我们在程序中定义一组命名的常量。在C++中,枚举类型是一种非常有用的数据类型,它可以帮助我们更好地组织和管理代码。

 

本篇文章将详细介绍C++中的枚举类型,包括枚举类型的定义、枚举变量的声明和使用、枚举类型的成员函数和枚举类型的继承等内容。

 

枚举类型的定义

 

枚举类型的定义通常包含关键字enum,后跟枚举类型名和枚举常量列表。下面是一个简单的示例:

 

enum Weekday {

   Monday,

   Tuesday,

   Wednesday,

   Thursday,

   Friday,

   Saturday,

   Sunday

};

 

在上面的示例中,我们定义了一个名为Weekday的枚举类型,它包含了7个枚举常量。这些枚举常量的名称分别是Monday、Tuesday、Wednesday、Thursday、Friday、Saturday和Sunday。这些名称是区分大小写的。

 

枚举变量的声明和使用

 

我们可以使用以下语法来声明一个枚举变量:

 

enum Weekday day;

 

在上面的示例中,我们声明了一个名为day的枚举变量。需要注意的是,枚举变量的数据类型必须与枚举类型的名称相同。在本例中,枚举变量的数据类型为Weekday。

 

我们可以使用以下语法来给枚举变量赋值:

 

day = Monday; // 将枚举变量赋值为Monday

 

在上面的示例中,我们将枚举变量day赋值为Monday。需要注意的是,枚举变量的赋值必须是枚举类型的常量之一。否则编译器将会报错。

 

我们可以使用以下语法来访问枚举变量的值:

 

cout << "The day is " << day << endl; // 输出The day is Monday

 

在上面的示例中,我们输出了枚举变量的值。需要注意的是,输出时需要使用整数形式来输出枚举常量。因此,输出结果为The day is 1。

 

枚举类型的成员函数

 

我们可以像其他数据类型一样在枚举类型中添加成员函数。下面是一个示例:

 

enum class Month {
    January,
    February,
    March,
    April,
    May,
    June,
    July,
    August,
    September,
    October,
    November,
    December
};
 
ostream& operator<<(ostream& os, const Month& month) {
    os << monthName[month]; // 使用字符串数组monthName存储月份的名称
    return os;
}
 
int main() {
    Month m1 = Month::January; // 使用::运算符访问嵌套的枚举常量
    cout << "The " << m1 << " is the first month of the year." << endl; // 输出The January is the first month of the year.
    return 0;
}

 

在上面的示例中,我们定义了一个名为Month的枚举类型,并在其中添加了一个名为operator<<的成员函数。这个函数的作用是将一个Month类型的对象输出到流中。为了实现这个功能,我们使用了一个字符串数组monthName来存储月份的名称。然后我们在operator<<函数中将月份的名称输出到流中。最后我们在main函数中对Month类型的对象进行了输出。需要注意的是,在使用运算符重载时需要使用关键字operator。

 

枚举类型的继承

 

由于枚举类型是一种用户自定义的数据类型,因此它可以与其他数据类型一样进行继承。下面是一个示例:

class Shape {
public:
    virtual double area() const = 0; // pure virtual function
};
 
class Circle : public Shape { // Circle继承自Shape
private:
    double radius;
public:
    Circle(double r) : radius(r) {} // 构造函数
    double area() const override { return 3.14 * radius * radius; } // 实现area()函数
};

 

在上面的示例中,我们首先定义了一个抽象基类Shape,并在其中添加了一个纯虚函数area()。然后我们定义了一个派生类Circle,并将其继承自Shape类。最后我们在Circle类中对area()函数进行了实现。需要注意的是,在使用继承时需要在派生类的类名前加上关键字class或在类名后加上冒号(:)。

目录
相关文章
|
云安全 安全 Cloud Native
阿里云 SASE 2.0 能力迭代|构建一体化办公数据安全解决方案
阿里云 SASE 2.0 能力迭代|构建一体化办公数据安全解决方案
|
域名解析 网络协议 大数据
阿里云域名购买与域名解析使用教程(图文教程)
该文档是关于在阿里云注册账号、购买域名及进行DNS解析的步骤指南。首先,需注册阿里云账号并进行实名认证,建议选择企业认证以便获取企业发票。接着,通过阿里云域名注册页面检查并购买未被注册的域名,将域名添加至购物车并完成支付。购买后,在云解析DNS界面进行实名认证,然后对域名进行解析设置,选择A记录类型,填写主机记录(如www),记录值为云服务器的IP地址,设置TTL,并校验解析是否成功。最后,文中还提及了如何在云服务器上进行实例名称的修改和查看服务器状态等操作。
|
Python
如何用Python制作一个简单的二维码生成器
如何用Python制作一个简单的二维码生成器
554 0
|
存储 负载均衡 专有云
钉钉专属存储的几种部署架构
MiniOSS三种常用的部署架构
3314 0
钉钉专属存储的几种部署架构
|
Java Scala 流计算
Akka在Flink中的使用剖析
Akka与Actor 模型 Akka是一个用来开发支持并发、容错、扩展性的应用程序框架。它是actor model的实现,因此跟Erlang的并发模型很像。在actor模型的上下文中,所有的活动实体都被认为是互不依赖的actor。
4193 0
|
14天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34753 38
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
8天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
8683 26
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
3天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
1711 17
|
25天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45645 155
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw