面向对象上机考试题(1)——关于宠物进笼Anne的宠物小屋有12个笼子,每个笼子可以放不同的动物,但只能放1只或0只,包括猫Cat,狗Dog,蛇Snake.1,实现一个简单的管理系统,可增加、删除笼子中的宠物,查询每个笼子中存放的宠物类型,(包括笼子为空的情况),统计笼中宠物的种类和数量.2,定义描述宠物小屋的类shelves,其中有12笼子用于存放各种宠物.3,定义虚拟基类Animal,包括纯虚函数ShowMe,显示每个宠物的情况,包括类型、颜色、体重和喜爱的食物。4,定义派生类Cat,Dog,Snake,具体实现上述纯虚函数。5,重载输入‘'*作符,使得可能通过cin直接读入宠物颜色、体重和喜爱的食物。6,编写main函数,测试上述要求和各种功能。*/#includeiostream.h#includestring.henum{NONE=0,CAT=1,DOG=2,SNAKE=3};classAnimal{protected:charcolor[20];charfood[20];doubleweight;public:virtualvoidShowMe()=0;};classCat:publicAnimal{public:friendistream&operator(istream&is,Cat&cat);voidShowMe(){cout猫的颜色、喜欢的食物、体重分别为:;coutcolor”,”food”,”weightendl;}};istream&operator(istream&is,Cat&cat){cout请输入猫的颜色:;iscat.color;cout喜爱的食物:;iscat.food;cout体重:;iscat.weight;returnis;}classDog:publicAnimal{public:friendistream&operator(istream&is,Dog&Dog);voidShowMe(){cout狗的颜色、喜欢的食物、体重分别为:;coutcolor”,”food”,”weightendl;}};istream&operator(istream&is,Dog&dog){cout请输入狗的颜色:;isdog.color;cout喜爱的食物:;isdog.food;cout体重:;isdog.weight;returnis;}classSnake:publicAnimal{public:friendistream&operator(istream&is,Snake&snake);voidShowMe(){cout蛇的颜色、喜爱的食物、体重分别为:;coutcolor”,”food”,”weightendl;};istream&operator(istream&is,Snake&snake){cout请输入蛇的颜色:;issnake.color;cout喜爱的食物:;issnake.food;cout体重:;issnake.weight;returnis;}classShelves{intcage[12];//每个笼子里动物的数量intsum[3];每种动物的数量Catcats[12];Dogdogs[12];Snakesnakes[12];public:Shelves(){for(inti=0;i12;i++)cage[i]=NONE;for(i=0;i3;i++)sum[i]=0;}intpush_cat(Cat&cat,intn){cats[n]=cat;if(cage[n]!=NONE)return0;else{sum[0]++;returncage[n]=CAT;}}intpush_dog(Dog&dog,intn){dogs[n]=dog;if(cage[n]!=NONE)return0;else{sum[1]++;returncage[n]=DOG;}}intpush_snake(Snake&snake,intn){snakes[n]=snake;if(cage[n]!=NONE)return0;else{sum[2]++;returncage[n]=SNAKE;}}voiddel(intn){if(cage[n]==CAT)sum[0]--;if(cage[n]==DOG)sum[1]--;if(cage[n]==SNAKE)sum[2]--;if(cage[n]==NONE)cout笼子里没有动物;else{cage[n]=NONE;cout已删除笼子里的动物;}cout}voidseek(intn){if(cage[n]==NONE)cout第N个笼子里没有动物;if(cage[n]==CAT){cout第N个笼子里的动物为猫,;cats[n].ShowMe();}if(cage[n]==DOG){cout第N个笼子里的动物为狗,;dogs[n].ShowMe();}if(cage[n]==SNAKE){cout第N个笼子里的动物为蛇,;snakes[n].ShowMe();}cout}voidcount(){cout笼子里的猫总共有:SUM[0]只endl;cout笼子里的狗总共有:SUM[1]只endl;cout笼子里的蛇总共有:SUM[2]只endl;}};voidmain(){Catcat;Dogdog;Snakesnake;Shelvesshelves;inti=1,j;cout这是关于往笼子里放动物的问题:endl;cout1:往笼子里放猫;endl;cout2:往笼子里放狗;endl;cout3:往笼子里放蛇;endl;cout4:查询笼子里的动物;endl;cout5:删除笼子里的动物;endl;cout6:统计笼子里的动物种类及数量;cout7:退出程序;endl;cout------------------------------------------endl;while(i){cout请选择您的操作:;cini;switch(i){case1:cout往哪只笼子里面放:;cinj;cincat;while(shelves.push_cat(cat,j)==0){cout笼子里已有动物,请换一个笼子:;cinj;}break;case2:cout往哪只笼子里面放:;cinj;cindog;while(shelves.push_dog(dog,j)==0){cout笼子里已有动物,请换一个笼子:;cinj;}break;case3:cout往哪只笼子里面放:;cinj;cinsnake;while(shelves.push_snake(snake,j)==0){cout笼子里已有动物,请换一个笼子:;cinj;}break;case4:cout查询哪只笼子:;cinj;shelves.seek(j);break;case5:cout删除哪只笼子里的动物:;cinj;shelves.del(j);break;case6:shelves.count();break;default:i=0;break;}coutendl;}}面向对象上机考试题(2)——关于堆栈1.请实现一个栈,既可以存放整数,又可以存放字符串。简单的说,栈是一种数据结构,按照后进先出的顺序管理进、出栈的元素。本题要求完成:(1)实现描述栈的类Stack,其中定义了栈的大小Size(即栈中可以存放的元素个数),并包括进栈函数Push,出栈函数Pop和显示栈顶元素的函数Top。(2)定义基类Element,至少包含纯虚函数ShowMe。(3)从基类Element中派生整数类MyInteger和字符串类MyString,具体实现上述纯虚函数ShowMe,显示该元素的类型和相应的值。(4)重载输入“”*作符,使得可以通过cin直接读入上述整数类和字符串类的对象值。(5)编写main函数,测试上述所要求的各种功能,即可以根据菜单命令增加栈元素、删除栈元素、显示栈顶元素,其中的元素可以是整数和/或字符串。提示:虚拟基类Element的定义至少包括以下纯虚函数ShowMe,classElement{//……public:virtualvoidShowMe()=0;//……};*/#includestdafx.h#includeiostream.h#includestring.hconstmax=1000;#defineNULL0classElement{public:virtualvoidShowMe()=0;};classMyInteger:publicElement{inta;public:MyInteger(){a=0;}friendistream&operator(istream&is,MyInteger&MyI);intGet(){returna;};voidShowMe(){cout整数:A}};istream&operator(istream&is,MyInteger&MyI){isMyI.a;returnis;}classMyString:publicElement{chars[100];public:friendistream&operator(istream&is,MyString&MyS);voidShowMe(){cout字符串:S};istream&operator(istream&is,MyString&MyS){isMyS.s;returnis;}classstack{MyStringMyS[max];MyIntegerMyI[max];inttop;public:stack(){top=-1;}voidpush(MyInteger&My){MyI[++top]=My;}voidpush(MyString&My){MyS[++top]=My;}voidTop(){if(empty())cout栈为空elseMyI[top].ShowMe();}voidTops(){if(empty())cout栈为空elseMyS[top].ShowMe();}voidpop(){MyI[top--].ShowMe();}voidpops(){MyS[top--].ShowMe();}boolempty(){return(bool)(top==-1);}boolfull(){return(bool)(top==max-1);}};intmain(intargc,char*argv[]){MyIntegerMy1;MyStringMy2;stackst1,st2;inti,j;cout请输入要进栈整数个数:;cinj;cout请输入J个整数for(i=0;i{cinMy1;st1.push(My1);}cout栈顶元素为:;st1.Top();cout请输入要出栈的元素个数:;cinj;cout依次出栈元素为:for(i=0;ist1.pop();cout出栈后栈顶元素为:;st1.Top();cout请输入要进栈的字符串个数:;cinj;cout请输入J个字符串for(i=0;i{cinMy2;st2.push(My2);}cout栈顶元素为:;st2.Tops();cout请输入要出栈的元素个数:;cinj;cout依次出栈元素为:for(i=0;ist2.pops();