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++教材。

  • 相关阅读:
    程序结束时执行
    Flex动画效果
    Flex_As操作大全
    bat文件格式
    flex builder 1037:包不能嵌套
    JAVA延时
    RMAN备份详解2
    linux系统监控示例:vmstat
    RMAN还原与恢复2(RMAN Incomplete Recovery)
    Oracle有效地使用块(1)
  • 原文地址:https://www.cnblogs.com/muchen/p/6134462.html
Copyright © 2011-2022 走看看