贵州大学实验报告学院:电子信息学院专业:通信工程班级:姓名学号实验组5实验时间指导教师成绩实验项目名称多态性实验目的通过让学生进行实验,使其对于动态多态性有一个较为深入的了解和熟悉。最终可以熟练使用。实验要求1.编写4个重载函数Double(x),返回值为输入参数的两倍;参数类型分别为int、long、float、double,返回值类型与参数类型一样。2.请编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle,二者都有计算对象面积的函数GetArea()和计算周长函数GetPerim()。3.对类Point重载++(自增)、--(自减)运算符。实验原理VisualC++的编译环境下,独立完成实验要求的内容,独立完成编写、编译以及运行的过程实验仪器安装了VisualC++的PC机器实验步骤按照实验要求的内容逐一完成实验的要求。顺序是编写、编译、运行。实验内容1.编写4个重载函数Double(x),返回值为输入参数的两倍;参数类型分别为int、long、float、double,返回值类型与参数类型一样。2.请编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle,二者都有计算对象面积的函数GetArea()和计算周长函数GetPerim()。3.对类Point重载++(自增)、--(自减)运算符。实验数据1、代码如下:#includeiostreamusingnamespacestd;intDouble(intx);longDouble(longx);floatDouble(floatx);doubleDouble(doublex);intmain(){intmyInt=6500;coutDouble(myInt)endl;longmyLong=65000;coutDouble(myLong)endl;floatmyFloat=6.5F;coutDouble(myFloat)endl;doublemyDouble=6.5e20;coutDouble(myDouble)endl;}intDouble(intx){return2*x;}longDouble(longx){return2*x;}floatDouble(floatx){return2*x;}doubleDouble(doublex){return2*x;}运行结果:2、代码:#includeiostream#definePI3.1415926;usingnamespacestd;classShape//抽象类的定义{public:virtualdoubleGetArea()=0;//纯虚函数virtualdoubleGetPerim()=0;//纯虚函数};classRectangle:publicShape//矩形类,公有继承{public:Rectangle(doubleaa,doublebb)//带参数的构造函数{a=aa;b=bb;cout长a宽bendl;}virtualdoubleGetArea(){returna*b;}virtualdoubleGetPerim(){return2*(a+b);}private:doublea;doubleb;};classCircle:publicShape//圆类,公有继承{public:Circle(doublerr)//带参数的构造函数{r=rr;cout半径rendl;}virtualdoubleGetArea(){returnr*r*PI;}virtualdoubleGetPerim(){return2*r*PI;}private:doubler;};voidmain(){doublelength,width;cout输入长和宽:;cinlengthwidth;Rectanglerect(length,width);cout面积是:rect.GetArea()endl周长是:rect.GetPerim()endl;doublerr;cout输入半径:;cinrr;Circlecir(rr);cout面积是:cir.GetArea()endl周长是:cir.GetPerim()endl;}运行结果:3、代码如下:#includeiostream.hclassPoint{public:Point(intxx,intyy):x(xx),y(yy){}voiddisplay()const;Point&operator++();Pointoperator++(int);Point&operator--();Pointoperator--(int);private:intx,y;};voidPoint::display()const{cout当前Point(x,y)endl;}Point&Point::operator++(){x++;y++;cout执行x++,y++操作!endl;return*this;}PointPoint::operator++(int){cout执行++x,++y操作!endl;returnPoint(++x,++y);}Point&Point::operator--(){x--;y--;cout执行x--,y--操作!endl;return*this;}PointPoint::operator--(int){cout执行--x,--y操作!endl;returnPoint(--x,--y);}intmain(){intx,y;coutInputx&y:;cinxy;Pointpoint1(x,y);point1.display();point1++;point1.display();++point1;point1.display();point1--;point1.display();--point1;point1.display();return0;}运行结果:实验总结学习使用虚函数实现动态多态性。而虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数,且在派生类中重工业新定义时,函数原型,包括返回类型、函数名、参数个数与参数类型的顺序,都必须与基类中的完全相同。此外,构造函数不能是虚函数,但析构函数可以是虚函数。函数的重载方法有一参数个数相同,但是类型不同;二参数个数不同;三coust(常量)。指导教师意见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。