六、复合数据的描述 一一构造数据类型 (基础部分)
六、复合数据的描述 −−构造数据类型 (基础部分)
主要内容 ·构造数据类型概述 ■枚举类型 ■数组类型 ■ 结构类型 联合类型
主要内容 ◼ 构造数据类型概述 ◼ 枚举类型 ◼ 数组类型 ◼ 结构类型 ◼ 联合类型
构造数据类型 有些数据不适合用基本数据类型来表示 语言往往提供了由基本数据类型来构造新 类型的手段 由基本数据类型构造出来的新类型称为构 造数据类型,它属于用户自定义数据类型
构造数据类型 ◼ 有些数据不适合用基本数据类型来表示。 ◼ 语言往往提供了由基本数据类型来构造新 类型的手段。 ◼ 由基本数据类型构造出来的新类型称为构 造数据类型,它属于用户自定义数据类型
枚举类型 ■如何描述一个星期的每一天这样的数据?如果 用int来描述,将会面临: ·1表示什么意思? ·星期天用什么整数表示?0还是7? 如果用0~6表示一个星期的每一天,则对于一个取 值为一个星期某一天的int型变量day,无法防止下 面的逻辑错误: day =10 day day*2 在C++中用枚举类型来解决上面的问题
枚举类型 ◼ 如何描述一个星期的每一天这样的数据?如果 用int来描述,将会面临: • 1表示什么意思? • 星期天用什么整数表示?0还是7? • 如果用0~6表示一个星期的每一天,则对于一个取 值为一个星期某一天的int型变量day,无法防止下 面的逻辑错误: ◼ day = 10 ◼ day = day*2 ◼ 在C++中用枚举类型来解决上面的问题
枚举类型的定义 枚举类型是由用户自定义的一种简单数据类型。在定 义一个枚举类型时,需要列出其值集中的每个值-枚 举值。 枚举类型的定义格式为: enum{}; ■为用逗号隔开的若干个整型符号常量。 例如 enum Day {SUN,MON,TUE,WED,THU,FRI,SAT}; enum Color {RED,GREEN,BLUE}; enum Month {JAN,FEB,MAR,APR,MAY,JUN,JUL, AUG,SEP,OCT,NOV,DEC};
枚举类型的定义 ◼ 枚举类型是由用户自定义的一种简单数据类型。在定 义一个枚举类型时,需要列出其值集中的每个值--枚 举值。 ◼ 枚举类型的定义格式为: • enum {}; ◼ 为用逗号隔开的若干个整型符号常量。 例如: • enum Day {SUN,MON,TUE,WED,THU,FRI,SAT}; • enum Color {RED,GREEN,BLUE}; • enum Month {JAN,FEB,MAR,APR,MAY,JUN,JUL, AUG,SEP,OCT,NOV,DEC};
默认情况下,第一个枚举值为0,其它的值为 前一个值加1 在定义枚举类型时,也可显式地给枚举值指定 值。例如: enum Day {SUN=7,MON=1,TUE,WED,THU,FRI,SAT}; TUE为2, boo类型可看成是C++语言提供的一个预定 义的枚举类型: enum bool false,true }
◼ 默认情况下,第一个枚举值为0,其它的值为 前一个值加1。 ◼ 在定义枚举类型时,也可显式地给枚举值指定 值。例如: • enum Day {SUN=7,MON=1,TUE,WED,THU,FRI,SAT}; • TUE为2,... ◼ bool类型可看成是C++语言提供的一个预定 义的枚举类型: • enum bool { false, true };
枚举类型变量的定义 先定义枚举类型,再定义枚举类型变量: enum Day {SUN,MON,TUE,WED,THU,FRI,SAT}; ·Dayd1; 或 enum Day d1;//C语言的写法 枚举类型和枚举类型变量同时定义: enum Day {SUN,MON,TUE,WED,THU,FRI,SAT}d1; 或 0 enum {SUN,MON,TUE,WED,THU,FRI,SAT}d1;
枚举类型变量的定义 ◼ 先定义枚举类型,再定义枚举类型变量: • enum Day {SUN,MON,TUE,WED,THU,FRI,SAT}; • Day d1; 或 • enum Day d1; //C语言的写法 ◼ 枚举类型和枚举类型变量同时定义: • enum Day {SUN,MON,TUE,WED,THU,FRI,SAT} d1; 或 • enum {SUN,MON,TUE,WED,THU,FRI,SAT} d1;
枚举类型的运算 赋值 。一个枚举类型的变量只能在相应枚举类型的值集中取值。例如: Day day; ■day=SUN;/oK ▣day=l;/Error ·day=RED;/Error ·相同枚举类型之间可以进行赋值操作,例如: ■Dayd1,d2; -d2=d1; 可以把一个枚举值赋值给一个整型变量例如: int a; ■ a=d1;/OK,将进行类型转换 但不能把一个整型值赋值给枚举类型的变量, ▣d1=a;/Error d1=(Day)a;/OK,但不安全!
枚举类型的运算 ◼ 赋值 • 一个枚举类型的变量只能在相应枚举类型的值集中取值。例如: ◼ Day day; ◼ day = SUN; //OK ◼ day = 1; //Error ◼ day = RED; //Error • 相同枚举类型之间可以进行赋值操作,例如: ◼ Day d1,d2; ◼ d2 = d1; • 可以把一个枚举值赋值给一个整型变量例如: ◼ int a; ◼ a = d1; //OK,将进行类型转换 • 但不能把一个整型值赋值给枚举类型的变量, ◼ d1 = a; //Error ◼ d1 = (Day)a; //OK,但不安全!
比较 ·枚举值之间的比较为枚举值所对应的整数之间的比较。例: MONd;//Error cout<<d;/OK,将把d转换成int
◼ 比较 • 枚举值之间的比较为枚举值所对应的整数之间的比较。例: MON > d; //Error cout << d; //OK,将把d转换成int
枚举类型输入输出举例 #include using namespace std; int main() Day d; int i; cin >i; switch (i) case 0:d SUN;break; case 1:d MON; break; case 2:d TUE; break; case 3:d WED; break; case 4:d THU; break; case 5:d FRI; break; case 6:d SAT;break; default:cout <"Input Error!"<endl;exit(-1);
枚举类型输入/输出举例 #include using namespace std; int main() { Day d; int i; cin >> i; switch (i) { case 0: d = SUN; break; case 1: d = MON; break; case 2: d = TUE; break; case 3: d = WED; break; case 4: d = THU; break; case 5: d = FRI; break; case 6: d = SAT; break; default: cout << "Input Error!" << endl; exit(-1); }