面向对象的程序设计.实验报告一(枚举、显示转换)

实验一面向对象程序设计基础

1.实验目的

        (1)理解并学会使用枚举类型数据以及掌握数据类型的转换

        (2)掌握在什么场景下需要使用枚举类型

2.实验内容

        数据类型转换的要求及格式、通过一些简单的函数实验来展现枚举类型的使用方式和使用场景

3.实验过程

3.1数据类型的强制转换

Part1.应用场景

当表达式中出现了多种类型数据的混合运算是,往往需要进行类型转换。

Part2.枚举类型的基本语法及注意事项

1)隐含转换(默认转换)

①转换的基本原则:低类型数据转换为高类型数据(类型越高,数据的表示范围越大,精度也越高)

 

②各种类型的高低顺序如下:

Char  short  int  unsigned  long  unsigned long  fioat  double

低---------------------------------------------------------------------------------à高

注:

这种转换是安全的,因为转换过程中数据的精度没有损失。

 

2)显示转换(强制转换)

①作用:将表达式的结果类型转换为另一种指定的类型。

 

②语法形式:

                         类型说明符(表达式) //C++风格的显示转换符号

                    (类型说明符)表达式    //C语言风格的显式转换符号

两种写法形式不同,功能完全相同。

 

③例如:

                 float z=7.56,fractionPart;

                 int wholePart;

                 wholePart=int(z);//将float转换为int

                 fractionPart=z-(int)z;

 

运行结果如下:

                                  即保留了小数部分。

 

3.2枚举类型

Part1.应用场景

有时候我们在解决实际问题时遇到这样的情景:一场比赛的结果只有胜、负、平局、取消比赛四种情况;一个袋子里只有红、黄、蓝、白、黑5种颜色的球;一个星期里只有星期一到星期日7天……。像这样的情形,用int,char等类型来表示他们,对数据的合法性检验会变得很麻烦。

所以,我们可以使用枚举类型。只需要将需要的变量值一一列举出来,便构成一个枚举类型。

Part2.枚举类型的基本语法及注意事项

一、     定义方式

enum 枚举类型名字 {枚举常量表};

 

例:enum Weekday{SUN,MON,TUE,WED,THE,FRI,SAT};

                                                    

注意:枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。

例如:  enum year_set{2010,2011,2012,2013,2014};//枚举常量不能是整形常量

 

        enum book_set{'a','b','c','d'};//枚举类型不能是字符常量

 

 

二、应用说明

  枚举类型具有默认值。默认从零开始,依次为0,1,2….

代码举例:

#include<iostream>
using namespace std;

enum Weekday{ SUN,MON,TUE,WED,THU,FRI,SAT };

int main()
{
    Weekday one;
    for (int count = SUN; count <= SAT; count++) {
        cout << count << endl;
    }
    return 0;
}

 

通过代码和结果我们可以知道,我将int类型的count赋值为枚举类型的数据,在将count的值一一打印出来,结果正是从0,1,2,3,4,开始递增的。

 

 

①  枚举类型应当按照常量来处理,不能对他们赋值

代码举例:

#include<iostream>
usingnamespace std;
enumWeekday{SUN,MON,TUE,WED,THU,FRI,SAT};
int main()
{
    Weekday one = SUN;
    SUN = 0;
    return 0;
}

 

程序报出以上错误,这就说明了枚举类型是一个常量,不能对他们赋值。

 

可以在声明中另行定义枚举元素的值,则后面的值在前面值的基础上依次加1

例如:
enum Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
//定义SUN=7,MON=1,则后面的值在前面值的基础上依次加1,即TUE=2,WED=3,......SAT=6 

代码举例:

#include<iostream>
using namespace std;

enum Weekday{ SUN = 1,MON,TUE,WED,THU,FRI,SAT = 7 };

int main()
{
    Weekday one;

    for (int count = SUN; count <= SAT; count++) {
        cout << count << endl;
    }

    return 0;
}

通过代码分析可知,我将枚举类型元素的第一个元素SUN赋值为1后,后续的枚举元素的值以此为基准依次递增1,而不是之前的0,1,2,3,4,……

 

 

枚举变量可以直接输出,输出的是变量的整数值。

enum color_set1 {RED, BLUE, WHITE, BLACK};
color3=RED;           //将枚举常量值赋给枚举变量
cout<< color3;         //输出的是color3的整数值,即RED的整数值1
 

枚举类型可以进行关系运算。

例如:

day1=SUN;//day1中元素SUM的序号值为0
DAY2=MON;//day2中元素MON的序号值为1
if(day2>day1)//day2>day1比较的就是序号值的关系1>0
 

 

 ⑤  整数值不能直接赋值给枚举变量,如需赋值给枚举变量,需要强制转换

整数值不能直接赋给枚举变量,如需将整数赋给枚举变量,应进行强制类型转换。

      枚举(隐含转换)整形

      整形(显示转换)枚举

1)枚举型数据隐含转换为整型数据(隐含转换)

int count=MON;//将枚举型数据MON的值赋给整型数据数据count 
int  a;
a=SUN;//枚举值赋给整型变量
cout<<a;

2)整型数据转换为枚举数据(显式转换)

result=GameResult(count);//显示转换,括号中的整型数据转换成枚举数据
 

代码举例:

① 声明枚举型变量 day ,today
#include<iostream>
usingnamespace std;
enum Weekday { SUN, MON, TUE, WED, TUR, FRI, STA };//声明枚举类型名weekday
int main()
{
    Weekday day;
enum Weekday today = FRI;//枚举型变量 day ,today
day=SUN;//对枚举型变量赋Weekday类型的值
    cout << day << endl << today << endl;
return0;
}
运行成功;
 
② 声明整型变量yesterday,对整型变量赋Weekday类型值
#include<iostream>
usingnamespace std;
enum Weekday { SUN, MON, TUE, WED, TUR, FRI, STA };//声明枚举类型名weekday
int main()
{
    Weekday day;
enum Weekday today = FRI;//枚举型变量 day ,today
int yesterday;//整型变量 yesterday
    yesterday = TUR;//对整型变量赋weekday型的值,测试是否正确,结果正确:枚举型变量(小)->整形变量(大),隐式转换
day=SUN;
    cout << day << endl << today <<endl<<yesterday<< endl;
return0;
}
运行成功:
说明枚举类型可以隐式转换为整形。
 

③声明枚举类型变量day,对枚举型变量赋整形值
#include<iostream>
usingnamespace std;
enum Weekday { SUN, MON, TUE, WED, TUR, FRI, STA };//声明枚举类型名weekday
int main()
{
    Weekday day;
enum Weekday today = FRI;//枚举型变量 day ,today
int yesterday;//整型变量 yesterday
    yesterday = TUR;//对整型变量赋weekday型的值,测试是否正确,结果正确:枚举型变量(小)->整形变量(大),隐式转换
    //day = SUN;//对枚举型变量赋weekday型的值,若对枚举形变量赋整型值,是否正确?
day = 0;//报错:无法从int型转换为枚举类型weekday
       cout << day << endl << today <<endl<<yesterday<< endl;
return0;
}
出现错误
 
④使用强制类型转换,对枚举型变量day赋整形值

#include<iostream>
usingnamespace std;
enum Weekday { SUN, MON, TUE, WED, TUR, FRI, STA };//声明枚举类型名weekday
int main()
{
    Weekday day;
enum Weekday today = FRI;//枚举型变量 day ,today
int yesterday;//整型变量 yesterday
    yesterday = TUR;//对整型变量赋weekday型的值,测试是否正确,结果正确:枚举型变量(小)->整形变量(大),隐式转换
    //day = 0;//报错:无法从int型转换为枚举类型weekday
    day = (Weekday)0;//正确!强制类型转换,格式day=Weekday(0); 也正确
    cout << day << endl << today <<endl<<yesterday<< endl;
return0;
}
 
通过强制类型转换,可以对枚举型变量赋整型值

 

 

                         ①                                                                                                 ②

 

 

 

                                                            ③                                                                                                        ④

 

 

通过以上四个程序测试过程,我们可以知道:

枚举类型的数据可以和整型数据相互转换,枚举类型数据可以隐含转换为整型数据,而整型数据到枚举数据的转换,则需要采用显示转换。

 

 
Part.3枚举类型的综合运用

例:口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中取出3个不同颜色的球,问有多少种取法。

代码展示:

#include<iostream>
usingnamespace std;
void transfer(int i)//将相应的数值组合通过switch语句转换为字符串
{    
switch (i)
    {
case0:cout <<"red "; break;
case1:cout <<"yello "; break;
case2:cout <<"blue "; break;
case3:cout <<"white "; break;
case4:cout <<"black "; break;
    }
}
enum ball { red, yello, blue, white, black };//定义球的枚举类型
int main()
{
int i, j, k, count = 0;
for (int i = red; i <= black; i++)
    {
for (int j = i + 1; j <= black; j++)
        {
for (int k = j + 1; k <= black; k++)
            {
                transfer(i);
                transfer(j);
                transfer(k);
                cout << endl;
                count++;
            }
        }
    }
    cout << count;
return0;
}

分析:

函数transfer将相应的数值组合通过switch语句转换为字符串。定义枚举形变量ball,列举出总共的5种颜色。取出三个,及三种颜色的组合,利用循环嵌套,一一列举,以红球开始,以黄球开始,以蓝球开始的情况即可

Part4.实验感想

通过这次实验,很清晰的了解了数据类型转换的要求以及语法形式,枚举类型的基本语法和使用场景,并对枚举类型与整型数据转化的要求做了详细的实验测试,巩固了强制类型转换的知识点的同时,对枚举类型变量的赋值要求有了更深层次的理解

 

posted @ 2019-10-21 11:31  nanaa  阅读(365)  评论(0编辑  收藏  举报