类里定义常量和枚举

作用域为类的常量
如果要在类里定义常量
#include<iostream>
#include<cstdio>
using namespace std;

class NODE
{
private:
	int val;
	const int p = 1;
};

int main()
{

	return 0;
}

这样编译会报错(在C++11中是可允许的,但早期的版本不支持)。因为类声明只是描述了对象的形式,并没有创建对象。因此,在创建对象前,将没有用于存储值的空间。因此,如果是C++11之前的版本,可以加上static关键字来定义常量。
static const int p=1;
也可以用枚举类型。

作用域为类的枚举
在类中定义枚举
private:
	enum{one=1};
在类中声明的枚举的作用域为整个类。但是用这种方式声明枚举并不会创建类数据成员。即所有对象中都不包含枚举,它只是一个符号名称。即在作用域中遇到one时,编译器用1来代替它。由于这里使用枚举只是为了创建符号常量,并不打算创建枚举类型的变量,因此不需要提供枚举名。
在声明相同的枚举变量时,会发生冲突。
private:
	enum e1{one,two,three};
	enum e2{ont,two,three};
可以在两个枚举前都添加class关键字或者只在一个枚举前添加class定义,加以区分。
class NODE
{
private:
	enum e1 { one=1, two, three };
	enum class e2 { one=2, two, three }; 
public:
	int get_e1_one()
	{
		return one;
	}
	int get_e2_one()
	{
		return (int)e2::one;
	}
};

加了class关键字的枚举,在需要用到它里的常量时,必须加枚举名加以限定。而且加了class之后,枚举名里的常量不能自动转换成int,必须强制转换。没class关键字的枚举则无这些限制。
枚举用某种底层整型类型表示。在C++98中,如何选择取决于实现,因此包含枚举的结构的长度随系统而异。在C++11中,对于类内的枚举,默认底层类型为int。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值