寫一個程式,定義抽象基類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;
}
uj5u.com熱心網友回復:
多載符號有兩種方式,你用的是方法2,前面加friend,定義友元函式<,另外有個小瑕疵就是回傳值應該是bool型別bool operator>(Cylinder& a) {}//方法1:拿this和a比較
friend bool operator>(Cylinder& a, Cylinder& b) {} //方法2:在類外拿兩個Cylinder物件比較
uj5u.com熱心網友回復:
#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;
}
uj5u.com熱心網友回復:
錯誤很多,與其把體積表面積定義為int型別函式,回傳一個0,沒用啊,還不如void轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/42723.html
標籤:C++ 語言
