effective C++ 01 减少使用#define

高效的c++ 01减少使用#define

01减少使用#define

开始新的旅程吧!

一、传统枚举
先看看之前的代码:

   #define TY_UP	           0    
    #define TY_DOWN	           1    
    #define TY_LEFT	           2
    #define TY_RIGHT           3
    #define TY_IN	           4
    #define TY_OUT	           5
    #define TY_LEFT_UP         6
    #define TY_RIGHT_UP        7
    #define TY_LEFT_DOWN       8
    #define TY_RIGHT_DOWN      9
如上所写,代码繁琐,而且编译若报错,就比如TY_IN 报错的是4,而不是TY_IN,不方便调试。
//01.枚举类型的定义
    enum YunTaiControlEnum
    {
    	up=1,downn,nleft,nright
    };


    void main()
    {
    	YunTaiControlEnum m = nright;
    	//02.对于枚举,只定义了赋值运算符,没有为枚举定义算术运算。
    	int a = 2;
    	switch (a)
    	{
    	case up:
    		cout << "up" << endl;
    		break;
    	case downn:
    		cout << "downn" << endl;
    		break;
    	case nleft:
    		cout << "left" << endl;
    		break;
    	case nright:
    		cout << "right" << endl;
    		break;
    	default:
    		break;
    	}	
    	//03.整数类型转化为枚举类型
    	int x = 1;
    	YunTaiControlEnum temp = YunTaiControlEnum(x);
    	switch (temp)
    	{
    	case up:
    		cout << "up" << endl;
    		break;
    	case downn:
    		cout << "downn" << endl;
    		break;
    	case nleft:
    		cout << "left" << endl;
    		break;
    	case nright:
    		cout << "right" << endl;
    		break;
    	default:
    		break;
    	}
    	//04.对于枚举,只定义了赋值运算符,没有为枚举定义算术运算。
    	temp++;//报错
    	YunTaiControlEnum tempx = temp + 1;//报错
    
    	system("pause");
    }

二、强枚举
强类型枚举(Strongly-typed enums),号称枚举类型,是C++11中的新语法,用以解决传统C++枚举类型存在的缺陷。传统C++中枚举常量被暴漏在外层作用域中,这样若是同一作用域下有两个不同的枚举类型,但含有相同的枚举常量也是不可的,比如:

 enum Side{Right,Left};
    enum Thing{Wrong,Right};

这是不能一起用的。

//01.强枚举类型的定义,如果不加class则会报错,nleft重新定义
    enum class YunTaiControlEnum
    {
    	up=1,downn,nleft,nright
    };
    enum class side{
    	nleft,nright
    };

以下是代码片段:

int a = 3;
    	switch (YunTaiControlEnum(a))
    	{
    	case YunTaiControlEnum::up:
    		cout << "up" << endl;
    		break;
    	case YunTaiControlEnum::downn:
    		cout << "downn" << endl;
    		break;
    	case YunTaiControlEnum::nleft:
    		cout << "left" << endl;
    		break;
    	case YunTaiControlEnum::nright:
    		cout << "right" << endl;
    		break;
    	default:
    		break;
    	}	

三、用const 替换#define 的时候有两个地方值得注意:
1.定义常量指针-建议使用两个const

 Const char *const ptr = “hello world”;

其实更推介const string mystr(“hello world”);
2.类class专属常量,如果要保证只有一个实体则需加static

class test 
{
  public:
		 static	const int a = 12;//常量声明
		 int  score[a];

}

不要高兴的太早,这只是声明,不是定义,如果是整数类型,且static,const修饰,如果不取地址则无需定义,如果要取地址则必须定义。例如:

   const int test::a;//不需要初始值

完整代码如下:

  class test
    {
    public:
    	test() = default;
    	static const int a = 10;
    	int score1[a];
    	enum  MYnUM
    	{
    		TyNum = 10
    
    	};
    	int score2[TyNum];
    };
    enum class side{
    	nleft,nright
    };
    const int test::a;
    
    
    void main()
    {
    	test t;
    	cout << &t << endl;
    	cout << t.a << endl;
    	cout << &t.a << endl;
    
    	system("pause");
    }

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值