对枚举类型、结构类型的一些认识

            什么是枚举

       枚举(enumeration),就是一组字面(单词),每个字面对应一个字面值。

           枚举有什么用处

       例如,需要把一年四季在程序中表示出来,可能会用0,1,2,3,分别表示一年四季中的春、夏、秋、冬。这样不能直观的表示出是哪个季节,另外这样的代码不能成为健壮的代码。假设,我们在程序中定义了一个int类型的变量seaSon,用它来存入季节。此时,可以把超出定义四季范围内的int类型数字赋值给seaSon.

int seaSon=5; //这行代码是合法的,不会报错。但是,5代表一年四季中哪个季节?

  枚举类型,就可以解决这些问题。

 

          怎么定义枚举

enum  Season
{
    Spring,Summer,Fall,Winter;  //Spring=0,Summer=1,Fall=2,Winter=3.默认第一个成员的字面值为0
                                                //剩下的成员,按前面的成员字面值增加1.(第一个除外,它默认是0)
}

enum Season
{
     Spring=1,Summer,Fall=4,Winter; //此时Spring=1,Summer=2,Fall=4,Winter=5;
}

默认情况下,枚举中的字面值为int类型,我们可以改为其他整数类型。例如:short,byte,sbyte,ushort,int,uint,long,ulong.

enum Season: short{Spring,Summer,Fall,Winter}  //将字面值改为short类型

怎样使用枚举类型

enum Season
{
     Spring,Summer,Fall,Winter;
}

Season colorful=Season.Fall;
Season  colorful_1=Season.Summer;      //初始化枚举类型的变量时,只能赋给枚举中定义的值。

 

适用于枚举的运算符

因为枚举中的字面值只能为整数类型,所以适用于整数类型的运算符都适用于枚举类型。(bitwise、shift除外)。

Static void doWork()
{
      Season first=Season.Spring;
     for(int i=0;i<4;i++)
    {
    Console.WriteLine(first);     //依次输出Spring,Summer,Fall,Winter.
     first++;       //自增运算符
    }
     Console.WriteLine(first);   //此时first超越了枚举定义的范围,此时f输出4。  

}

 

什么是结构

跟类很相似,有自己的字段,方法,构造方法。

结构有什么用处

当一个类中存放的数据非常少,此时创建这个类所消耗的内存资源与它所存的数据不成比例。此时,我们可以考虑用结构来代替类。因为结构是值类型,存放在栈上,就减少了内存的开销。

怎样定义结构

structure Time
{
 private int hours,minutes,seconds;

public Time(int hh, int mm,int ss)
{
       this.hours=hh;
      this.minutes=mm;
     this.ss=ss;
}

pulbic int Hours()
{
      return this.hours;
}
}

结构与类的区别

结构与类的区别有以下两种:

1.不能自己定义默认的构造方法.(没有参数的构造方法)。以下代码,如果是类,不会报错。

structure Time
{
    public Time()
{
                        //会报错,结构类型不允许自己定义默认的构造方法。
}
}

因为,编译器在编译时,如果发现类中没有构造方法,就会自动生成一个。如果类中有构造方法,就不会自动生成。编译器不关结构中有没有构造方法,都会自动生成构造方法。与类中的默认构造方法一样,结构中的构造方法,会把结构中的字段根据所对应的类型初始化为null,0,false.可以通过非默认构造函数改变字段值。初始化结构中的字段,必须全部初始化。

struct Time
{
    private int hours,minutes,seconds;

     public Time(int hh, int mm)
{
               this.hours=hh;
              this.minutes=mm;
              //会报错,seconds没有初始化
}
}

2.在类中,我们可以定义字段时初始化,但是在结构中不可以。

struct time
{
 private int hours=0;  //报错,定义时不能初始化
 private int minutes;
 private int seconds;
}

 

理解结构初始化

Time now=new Time();   //我们创建了一个结构类型的对象now。new这个关键字调用了Time结构的                                       //默认构造函数,把它的字段初始化为0.
                                     //因为结构是值类型,我们也可以这样:
                                    //Time now;
         //但是此时,访问now中的任意成员,都会报错。因为没有初始化now中的字段,它们都是         //uninitialized状态。

我们创建了一个结构类型的对象now。new这个关键字调用了Time结构的默认构造函数,把它的字段初始化为0.

因为结构是值类型,我们也可以这样:

Time now;

但是此时,访问now中的任意成员,都会报错。因为没有初始化now中的字段,它们都是uninitialized状态。

时间: 2024-10-08 03:30:10

对枚举类型、结构类型的一些认识的相关文章

[C语言]进阶|结构类型: 枚举, 结构, 类型定义

--------------------------------------------------------------------- 枚举: // main.c #include <stdio.h> const int red = 0; const int yellow = 1; const int green = 2; int main(int argc, const char * argv[]) { /* 常量符号化:用符号而不是具体的数字来表示程序中的数字; 这样看到符号才能知道背

《Go语言实战》Go 类型:基本类型、引用类型、结构类型、自定义类型

Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么. 提前知道值的类型的好处有很多,比如编译器可以合理的使用这些值,可以进一步优化代码,提高执行的效率,减少 bug 等等. 基本类型 基本类型是 Go 语言自带的类型,比如 数值.浮点.字符串.布尔.数组 及 错误 类型,他们本质上是原始类型,也就是不可改变的,所以对他们进行操作,一般都会返回一个新创建的值,所以把这些值传递给函数时,其实传递

枚举、结构、类

C++中,枚举类型.结构类型.类类型是三种用户自定义的符合数据类型. 5.1 简单数据类型与构造式数据类型 简单数据类型,又基本数据类型.原子数据类型:该类型的数据是单一的一个值,不可再细分为若干部分.包括int, float, char等: 构造式数据类型:数据内部有多个组成部分,可以分别访问这些组成部分.包括枚举.结构.类. 5.2 枚举类型 若想建立一种数据类型,其值域由程序员自定义,可以使用enum定义: enum <枚举类型名> {<枚举元素表>}; 如: enum Da

C 开发学习 - 结构类型(枚举/结构/类型定义)

一.枚举 定义:枚举是 一种用户定义的数据类型,它用的关键字 enum 枚举类型名字通常并不真的使用,要用的是在大括号里地名字,因为它们就是常量符合,它们的类型是int,值则依次从0到n. enum colors {red, yellow, green} 语法:enum 枚举类型名称{名字0m, ..., 名字n}; 案例一:自动计数的枚举 // // main.c // enum // // Created by liuxinming on 15/4/26. // Copyright (c)

C#基本语法复习-使用枚举和结构来创建值类型

声明枚举: enum Season{Spring,Summer,Fall,Winter} 如果不为枚举一个枚举文字常量显示指定一个常量整数型,编译器会自动为他指定比前面一个枚举文字常量大一的值 enum Season{Spring=1,Summer,Fall,Autumn=Fall,Winter} 选择枚举的基本类型: enum Season : Short{Spring,summer,fall,winter } 声明结构: struct Time { private int hours,min

自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}

一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct Student{ int num; char name[20]; char sex; int agel float score; char addr[30]; }; 结构体声明的一般形式: struct 结构体类型名 {成员列表}: 结构体类型名用作结构体类型的标志,上面的Student就是结构体类型名

枚举结构和结构类型

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; namespace ConsoleApplication4 { class Program { enum weekday { sunday,monday,tuesday,wednesday,thursday,frid

C#学习笔记(隐式和显式转化、枚举类型、结构类型、数组类型和字符串)

1 类型转换 1.1 隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换. ushort destinationVar; char sourceVar = 'a'; destinationVar = sourceVar; Console.WirteLine("soueceVar Val:{0}",sourceVar); Console.wirteLine("destination Val:{0}",destinatio

C编译器剖析_4.4 语义检查_外部声明_类型结构的构建(2)

在这一小节中,我们将对形如第3章图3.3.17所示的结构体语法树进行语义检查,从而构建结构体的类型结构. 图3.3.17 ParseStructOrUnionSpecifier()构建的语法树 我们在第2章中给出了以下结构体struct Data对应的类型结构,如图2.4.4所示.为了阅读方便,我们重新给出这2幅图,由图示我们也能较清楚地预览本节的起点和终点. struct Data{ int abc:8; int def:24; double f; } dt; 图2.4.4   结构体的类型结