zoukankan      html  css  js  c++  java
  • 第一篇:容易遗忘的“枚举”

    前言

           在C/C++代码中,经常看到枚举类型的变量。那么枚举类型有啥用?枚举类型具体又该如何使用?

           本文将结合具体实例为你解答。

    枚举类型有啥用?

           在编程中,我们经常需要为某些属性定义一组可选择的值。打个比方,我现在要编写一个文件处理程序,那么我就要先定义一个状态变量,然后用一组值来表示文件的打开,关闭等状态。

           我们很容易直观地想到以下两种做法:

     1 /*
     2  *  用宏
     3 */
     4 #define input 0
     5 #define output 1
     6 
     7 /*
     8  *  用常变量
     9 */
    10 const input 0
    11 const output 1

           这样的做法可行,但是有缺点,那就是没有体现出同一类状态变量的描述宏/值之间的关联性。而枚举类型则很好的解决了这个问题。

    枚举类型怎么用?

           首先看一个枚举定义的示例:

    1 enum Fruit {
    2     apple,
    3     orange,
    4     pear,
    5 };

           这个例子定义了一个名为Fruit的枚举类型,它包含三个描述值 - apple,orange,pear。其中第一个值(apple)默认等价于0,第二个(orange)1,依此类推。

           这几个描述值可以像一般的常量表达式般使用,请看下面示例:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 enum Fruit {
     6     apple,
     7     orange,
     8     pear,
     9 };
    10 
    11 int main()
    12 {
    13     cout << "apple: " << apple << endl;
    14     cout << "orange: " << orange << endl;
    15     cout << "pear: " << pear << endl;
    16 
    17     return 0;
    18 }

           运行结果:

          

           但枚举真正的用途是为一种状态变量提供一组相关联的描述值,参考以下代码:

    #include <iostream>
     
    using namespace std;
     
    enum Fruit {
        apple,
        orange,
        pear,
    };
    
    int main()
    {
        /*
         * 定义枚举变量jacklike和mikelike
        */
        Fruit jacklike;
        Fruit mikelike;
     
        /*
         * 将指定状态值赋给枚举变量
        */
        jacklike=apple; 
        mikelike=orange;
     
        /*
         * 程序根据枚举变量的状态值作出不同处理
        */
        if (jacklike == apple) {    
            cout << "Jack like apple" << endl;
        }
        if (mikelike == apple) {
            cout << "Mike like apple." << endl;
        }
     
        return 0;
    }

    小结

           必须要在具体编程中多多尝试使用枚举,才能真正掌握枚举。同时一些关于枚举的语法细则我没有列出,想全面了解请查阅相关C++教材。

  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/muchen/p/6134462.html
Copyright © 2011-2022 走看看