C++基础语法:类内枚举

前言

         "打牢基础,万事不愁" .C++的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结.

引入

        C++基础语法:枚举_枚举法基础 c++-CSDN博客前面写过一篇和枚举相关的帖子,这篇将类作用域内枚举再做个说明

枚举回顾

        枚举有三种形式: 符号常量集合, 无类作用域枚举,类作用域枚举 .其中符号常量集合可以完全替代常量(一般是整型常量),后两种被看作自建的新数据类型.

        三种枚举的区别:

        常量型枚举,无变量,可直接赋值整型变量;

        无作用域型枚举,有变量,能直接赋值整型变量;

        作用域型枚举,有变量,不能直接赋值整型变量;

        无类域枚举和类域枚举作为一种数据类型,有类型,变量和值这三要素.枚举的特点是每种枚举的取值已被限定,且值和整型常量可以互相转换.常量型枚举和无类域枚举可以直接转成整型常量,类域枚举需要强转(但不一定使用)

        常量型枚举和无类域枚举举例:

#include<iostream>
using namespace std;

enum { MAX = 500 };
enum SIZE { SMALL = 100, MIDDLE = 200, BIG = 300 };

int main(void) {
    int max = MAX;				    //枚举赋值整型变量
    SIZE size = SIZE::SMALL;        //不推荐使用
    int isize = size;			    //无类域枚举赋值整型变量
    cout << "最大值:" << max << endl;
    cout << "尺寸:" << isize << endl;
}

注意:如果文件里有同名的无类域枚举值,不被编译器识别,所以不推荐使用. 

 类域枚举

        下面有个DemoApple类,用枚举表示苹果的产地和颜色 

/*枚举的变量声明和枚举值的访问,注意加上作用域名称*/
#include<iostream>
using namespace std;

class DemoApple {									//苹果类

public:
	enum { WEIGHT = 500 };							//重量
	enum District { SD, SX };						//产地
	enum class Color { RED, GREEN, BLUE };			//颜色

private:

	int weight;
	District district;								//产地标识
	Color color;									//颜色标识

public:

	DemoApple(District ds=SD,Color col= DemoApple::Color::RED, int we = WEIGHT){
		district = ds;
		color = col;
		weight = we;
	}
	int getWeight() { return weight; }				//获得重量
	District getDistrict() const{ return district; }//接口函数,访问对象产地
	Color getColor() const{ return color; }			//接口函数,访问对象颜色
};

测试代码:

int main(void) {
	DemoApple da = DemoApple();
	cout << "默认苹果重量为:"<<da.getWeight()<<"克" << endl;
	DemoApple::Color color=da.getColor();			//访问对象颜色
	if (color == DemoApple::Color::RED)
		cout << "默认苹果是红色" << endl;
	//若枚举类型声明放在私有部分,则下面对象无法建立.必须放在public中
	DemoApple da1 = DemoApple(DemoApple::SX, DemoApple::Color::GREEN,600);	
	cout << "苹果重量为:" << da1.getWeight() << "克" << endl;
	DemoApple::District ds = da1.getDistrict();		//访问对象产地
	if (ds == DemoApple::SD)
		cout << "苹果产地山东" << endl;
	else
		cout << "苹果产地山西" << endl;

	int dweight = DemoApple::WEIGHT;				//常量枚举访问
	int ddistrict = DemoApple::SD;					//无类域枚举访问
	cout << "默认重量为:" <<dweight<< endl;
	cout << "默认产地为:" << ddistrict<<endl;

	DemoApple::Color col = DemoApple::Color::BLUE;
	int ccol = (int)col;							//可强转为整型
	cout << "默认颜色为:" << ccol << endl;
}

   ----说明:分别用到了常量枚举WEIGHT,无类域枚举District和类域枚举Color

         注意:

                1.想在类外访问枚举类型,声明要放在public中

                2.在类外声明枚举变量和使用枚举值时,前面要加上作用域名,包括命名空间和类空间.这里因为没有使用命名空间,所以前面只加上类名DemoApple

思考:枚举是否必要

        枚举并不是必须使用的,比如在本例中,可以用int district表示产地,0表示山东,1表示山西;也可以用int color表示颜色,0表示红色,1表示绿色,2表示蓝色.优点是写法简单,缺点是对程序员以外的使用者不太友好.

        在大型程序中,枚举用得很广泛

枚举的使用步骤

        1.声明枚举,定义枚举值

        如果在类外访问,放到public中,不想被访问放到private中.public中的枚举建议使用类域枚举,以避免文件中的枚举值冲突;private中的枚举建议使用无类域枚举(因为没有枚举值冲突的担心),也可以把这作为一种程序的"潜在规则".

        在<C++ Prime Plus> 6th Edition的P400有个例子,在public中使用无类域枚举,但他的类外有个命名空间,相当于加上了作用域.

        2.在类属性中声明枚举变量,做某个变量或者对象的状态标识

        3.提供接口函数,方便外界查询变量或对象状态.

小结

        枚举作为一种特殊的自定义数据类型,他的值由程序员定义,枚举值和整型常量有一定关系

        枚举适合做变量或对象的标识,使程序的可读性增强

  • 23
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jllws1

你的鼓励是我创作的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值