写一个程序,定义抽象基类container 由它派生出3个派生类, sphere(球体),cylinder(圆柱体)cube(正方体) 用虚函数分别计算几种

不知所措的小可爱 2019-05-05 06:10:39
写一个程序,定义抽象基类container 由它派生出3个派生类, sphere(球体),cylinder(圆柱体)cube(正方体) 用虚函数分别计算几种图形的表面积和体积 此外,编写重载运算符函数,重载运算符>和<用于判断对象的大小。如b1>b2,返回值为真或者假。 大神能帮我看看,我的代码有什么问题吗? #include<iostream.h> class Container { protected: double r; double l; public: Container(double x=0,double y=0) { r=x; l=y; } virtual int area()=0;//表面积 virtual int volume()=0;//体积 virtual int show()=0; }; class Sphere:public Container{ public: Sphere(double x=0,double y=0):Container(x,y) {}; int area() { cout<<"这个球体的表面积:"<<4*3.14*r*r<<endl; return 0; } int volume() { cout<<"这个球体的体积:"<<(4.0/3)*3.14*r*r*r<<endl; return 0; } int show() { cout<<area()<<endl; cout<<volume()<<endl; return 0; } int operator>(Sphere& a,Sphere& b) { int i; if(a.area()>b.area()) i=1; else if(a.volume()>b.volume()) i=1; else i=0; return i; } int operator<(Sphere& a,Sphere& b) { int i; if(a.area()<b.area()) i=1; else if(a.volume()<b.volume()) i=1; else i=0; return i; } };//球体 class Cylinder:public Container{ public: Cylinder(double x=0,double y=0):Container(x,y) {}; int area() { cout<<"这个圆柱体的表面积:"<<2*3.14*r*r+2*3.14*r*l<<endl; return 0; } int volume() { cout<<"这个圆柱体的体积:"<<3.14*r*r*l<<endl; return 0; } int show() { cout<<area()<<endl; cout<<volume()<<endl; return 0; } int operator>(Cylinder& a,Cylinder& b) { int i; if(a.area()>b.area()) i=1; else if(a.volume()>b.volume()) i=1; else i=0; return i; } int operator<(Cylinder& a,Cylinder& b) { int i; if(a.area()<b.area()) i=1; else if(a.volume()<b.volume()) i=1; else i=0; return i; } };//圆柱体 class Cube:public Container{ public: Cube(double x=0,double y=0):Container(x,y) {}; int area() { cout<<"这个正方体的表面积:"<<6*r*r<<endl; return 0; } int volume() { cout<<"这个正方体的体积:"<<r*r*r<<endl; return 0; } int show() { cout<<area()<<endl; cout<<volume()<<endl; return 0; } int operator>(Cube& a,Cube& b) { int i; if(a.area()>b.area()) i=1; else if(a.volume()>b.volume()) i=1; else i=0; return i; } int operator<(Cube& a,Cube& b) { int i; if(a.area()<b.area()) i=1; else if(a.volume()<b.volume()) i=1; else i=0; return i; } };//正方体 int main() { Container *ptr; Sphere b1(5.0),b2(4.0),b3,b4; Cylinder c1(5.0,4.0),c2(4.0,7.0); Cube c3(5.0),c4(6.0); ptr=&b1; ptr->area(); ptr->volume(); ptr=&b2; ptr->area(); ptr->volume(); int i; i=(b1>b2); if(i==1) { cout<<b1.area()<<">"<<b2.area()<<"ture"<<endl; cout<<b1.volume()<<">"<<b2.volume()<<"ture"<<endl; } else { cout<<b1.area()<<"<"<<b2.area()<<"false"<<endl; cout<<b1.volume()<<"<"<<b2.volume()<<"false"<<endl; } /*ptr=&c1; ptr->area(); ptr->volume(); ptr=&c2; ptr->area(); ptr->volume(); ptr=&c3; ptr->area(); ptr->volume(); ptr=&c4; ptr->area(); ptr->volume();*/ return 0; }
...全文
1981 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Moshangxue 2020-06-18
  • 打赏
  • 举报
回复
错误很多,与其把体积表面积定义为int类型函数,返回一个0,没用啊,还不如void
Moshangxue 2020-06-18
  • 打赏
  • 举报
回复
#include <iostream> using namespace std; class Container { public: virtual double area()=0;//表面积 virtual double volume()=0;//体积 virtual void show()=0; }; class Sphere:public Container { private: double r; public: Sphere(double x=0) {r=x;} virtual double area() { return 4*3.14*r*r; } virtual double volume() { return (4.0/3)*3.14*r*r*r; } virtual void show() { cout<<"表面积:"<<area()<<endl; cout<<"体积:"<<volume()<<endl; } friend bool operator>(Sphere& a,Sphere& b) { bool i; if(a.area()>b.area()) i=1; else if(a.volume()>b.volume()) i=1; else i=0; return i; } friend bool operator<(Sphere& a,Sphere& b) { bool i; if(a.area()<b.area()) i=1; else if(a.volume()<b.volume()) i=1; else i=0; return i; } };//球体 int main() { Container *ptr[2]; Sphere b1(5.0),b2(4.0); ptr[0]=&b1; ptr[1]=&b2; cout<<"球体1:";ptr[0]->show(); cout<<"球体2:";ptr[1]->show(); int i; i=(b1>b2); if(i==1) { cout<<b1.area()<<">"<<b2.area()<<":ture"<<endl; cout<<b1.volume()<<">"<<b2.volume()<<":ture"<<endl; } else { cout<<b1.area()<<"<"<<b2.area()<<":false"<<endl; cout<<b1.volume()<<"<"<<b2.volume()<<":false"<<endl; } return 0; }
Italink 2019-05-05
  • 打赏
  • 举报
回复
重载符号有两种方式,你用的是方法2,前面加friend,定义友元函数<,另外有个小瑕疵就是返回值应该是bool类型 bool operator>(Cylinder& a) {}//方法1:拿this和a比较 friend bool operator>(Cylinder& a, Cylinder& b) {} //方法2:在类外拿两个Cylinder对象比较

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧