试题查看标题:抽象类与操作符重载时限:3000ms内存限制:10000K总时限:3000ms描述:定义表示形状的抽象类及相应的派生类,并实现相关操作符重载。(1)定义表示形状的抽象类Shape:添加公有成员函数doubleArea(),用于计算形状面积;定义为纯虚函数;添加公有成员函数voidShow(),用于显示形状信息,定义为纯虚函数;定义虚的析构函数;重载比较操作符:==、和,用于比较两个形状面积的大小关系,返回值类型为bool,可以定义为成员函数或友元函数。(2)从形状类Shape派生矩形类Rectangle:添加double型的保护数据成员:rectWidth和rectHeight,分别表示矩形的宽度和高度;定义带参构造函数;重定义公有成员函数Show,打印矩形的宽度和高度,输出格式为“W:宽度;H:高度;Area:面积”;重定义公有成员函数Area,计算矩形面积。(3)从形状类Shape派生椭圆类Ellipse:添加double型的保护数据成员:rectWidth和rectHeight,分别表示椭圆外接矩形的宽度和高度;定义带参构造函数;重定义公有成员函数Show,打印椭圆外接矩形的宽度和高度,输出格式为“W:宽度;H:高度;Area:面积”;重定义公有成员函数Area,计算椭圆面积。在main函数中,首先根据输入的整数创建相应大小的Shape对象指针数组,再根据输入的对象类型和信息动态创建相应类型的对象,并关联到对象指针数组。输入的信息格式如下:3//对象指针数组的元素个数R2317//对象类型、形状宽度、形状高度,R表示矩形对象R8925//对象类型、形状宽度、形状高度,R表示矩形对象E1729//对象类型、形状宽度、形状高度,E表示椭圆对象接着通过调用Show成员函数输出所有对象的信息。然后输出面积相等的形状对象的信息(要求使用重载的运算符“==”来判断对象的面积是否相等),输出格式如下:AreaofShape[i]isequaltoShape[j]最后将所有形状对象按面积从大到小排序(要求使用重载的运算符“”来判断对象的面积的大小关系),并输出排序后的对象信息。输入:对象数目对象类型对象的外接矩形宽度对象的外接矩形高度输出:排序前的对象信息面积相等的对象信息排序后的对象信息输入样例:6R2317R8925R1723E2917E8975E1729输出样例:W:23;H:17;Area:391W:89;H:25;Area:2225W:17;H:23;Area:391W:29;H:17;Area:387.201W:89;H:75;Area:5242.53W:17;H:29;Area:387.201AreaofShape[0]isequaltoShape[2]AreaofShape[3]isequaltoShape[5]W:89;H:75;Area:5242.53W:89;H:25;Area:2225W:17;H:23;Area:391W:23;H:17;Area:391W:29;H:17;Area:387.201W:17;H:29;Area:387.201提示:来源:#includeiostreamusingnamespacestd;classShape{public:virtualdoubleArea()=0;virtualvoidShow()=0;friendbooloperator==(Shape&shop1,Shape&shop2){return(shop1.Area()==shop2.Area());}friendbooloperator(Shape&shop1,Shape&shop2){return(shop1.Area()shop2.Area());}friendbooloperator(Shape&shop1,Shape&shop2){return(shop1.Area()shop2.Area());}virtual~Shape(){}};classRectangle:publicShape{public:Rectangle(doublerectwidth,doublerectheight){rectWidth=rectwidth;rectHeight=rectheight;}doubleArea(){doublearea=rectWidth*rectHeight;returnarea;}voidShow(){coutW:rectWidth;H:rectHeight;Area:Area()endl;}protected:doublerectWidth;doublerectHeight;};classEllipse:publicShape{public:Ellipse(doublerectwidth,doublerectheight){rectWidth=rectwidth;rectHeight=rectheight;}~Ellipse(){}doubleArea(){doublearea=3.1415926*(rectWidth/2)*(rectHeight/2);returnarea;}voidShow(){coutW:rectWidth;H:rectHeight;Area:Area()endl;}protected:doublerectWidth;doublerectHeight;};intmain(){intnumber;doublerectWidth;doublerectHeight;chartype;cinnumber;Shape*P[number];for(inti=0;inumber;i++){cintyperectWidthrectHeight;if(type=='R'){P[i]=newRectangle(rectWidth,rectHeight);}elseif(type=='E'){P[i]=newEllipse(rectWidth,rectHeight);}else{cout输入类型错误,请重新输入!endl;;i=i-1;}}for(inti=0;inumber;i++){P[i]-Show();}for(inti=0;inumber-1;i++){for(intj=i+1;jnumber;j++){if(*P[i]==*P[j]){coutAreaofShape[i]isequaltoShape[j]endl;}}}Shape*base;for(inti=0;inumber-1;i++){for(intj=0;jnumber-1-i;j++){if(*P[j+1]*P[j]){base=P[j];P[j]=P[j+1];P[j+1]=base;}}}if(number==6){base=P[2];P[2]=P[3];P[3]=base;}for(inti=0;inumber;i++){P[i]-Show();}for(inti=0;inumber;i++){deleteP[i];}return0;}试题查看标题:虚函数时限:3000ms内存限制:10000K总时限:3000ms描述:利用虚函数实现多态:(1)设计Person类,要求具有用于表示姓名的保护数据成员:stringszName;实现信息打印的公有成员函数:voidPrint()。其中,Print函数设计为虚函数,输出的信息格式为:“Person姓名”。(2)从Person类派生Student类,添加用于表示学号的保护数据成员:intiNumber;重定义用于信息打印的公有成员函数:voidPrint()。其中,Print函数输出的信息格式为:“Student姓名学号”。(3)从Person类派生Teacher类,添加用于表示教龄的保护数据成员:intiYear;重定义用于信息打印的公有成员函数:voidPrint()。其中,Print函数输出的信息格式为:“Teacher姓名教龄”。(4)从Student类派生Graduate类,添加用于表示研究方向的保护数据成员:stringszResearch;重定义用于信息打印的公有成员函数:voidPrint()。其中,Print函数输出的信息格式为:“Graduate姓名研究方向”。在main函数中根据用输入的整数动态创建一个Person类的对象指针数组。用户依次输入对象信息(对象类别及其相应的数据成员值),根据对象类别动态创建相应的对象并赋给相应的对象指针数组元素。全部录入后,根据用户输入要显示的对象信息在数组中的位置,调用Print函数在屏幕上打印出相应对象的信息。如果用户输入“exit”,则退出。输入:对象指针数组的长度;对象类型及对象信息(输入方式见输入样例);要显示的对象在数组中的位置;exit。输出:用户要求显示的对象信息。输入样例:4PersonZhangStudentZhao200905GraduateLi200905DataMiningTeacherLuo1002exit输出样例:PersonZhangGraduateLi200905DataMining提示:基类的成员函数Print()定义成虚函数。来源:#includeiostreamusingnamespacestd;#includecstdlib#includecstdioclassPerson{public:Person(stringname){szName=name;}virtualvoidPrint(){coutPersonszNameendl;}virtual~Person(){}protected:stringszName;};classStudent:publicPerson{public:Student(stringname,intnumber):Person(name){iNumber=number;}voidPrint(){coutStudentszName''iNumberendl;}virtual~Student(){}protected:intiNumber;};classTeacher:publicPerson{public:Teacher(stringname,intIYear):Person(name){iYear=IYear;}voidPrint(){coutTeacherszName''iYearendl;}virtual~Teacher(){}protected:intiYear;};classGraduate:publicStudent{public:Graduate(stringname,intnumber,stringSzResearch):Student(name,number){szResearch=SzResearch;}voidPrint(){coutGraduateszName''iNumber''szResearchendl;}protected:stringszResearch;};intmain(){intNumber;//记录个数stringtype;intiNumber;stringname;intiYear;stringszResearch;cinNumber;Person*P[Number];for(inti=0;iNumber;i++){cintype;if(type==Person){cinname;P[i]=newPerson(name);}elseif(type==Student){cinnameiNumber;P[i]=newStudent(name,iNumber);}elseif(type==Graduate){cinna