|

楼主 |
发表于 2021-4-24 22:48:45
|
显示全部楼层
打得时候忘记了,,
我根据大佬你的说法修改了函数,基本可以实现我想要的功能了,感谢大佬!!
#include<iostream>
using namespace std;
#define pi 3.14
class shape
{
public:
virtual ~shape(){}
virtual float area()=0;
virtual float volume()=0;
virtual void printinfo()=0;
};
class point: public shape
{
public:
point(){x=0;y=0;}
point(float a,float b)
{
x=a;
y=b;
}
~point(){}
virtual float area(){return 0;}
virtual float volume(){return 0;}
virtual void printinfo()
{
cout<<"x="<<x<<" y="<<y<<endl;
}
private:
float x;
float y;
};
class circle: public point
{
public:
circle(){r=0;point();}
circle(float a,float b,float c):point(a,b)
{
r=c;
}
virtual float volume(){return 0;}
~circle(){}
float returnr()
{
return r;
}
virtual float area()
{
return pi*r*r;
}
virtual void printinfo()
{
point::printinfo();
cout<<"r="<<r<<endl;
cout<<"area="<<area()<<endl;
}
private:
float r;
};
class cylinder: public circle
{
public:
cylinder(){h=0;circle();}
virtual float area(){return 2*circle::area()+2*pi*circle::returnr()*h;}
cylinder(float a,float b,float c,float d):circle(a,b,c)
{
h=d;
}
~cylinder(){}
virtual float volume()
{
return h*circle::area();
}
virtual void printinfo()
{
cout<<"h="<<h<<endl;
circle::printinfo();
cout<<"volume="<<volume()<<endl;;
}
private:
float h;
};
int main()
{
shape *p;
point a(1,2);
circle b(1,2,3);
cylinder c(1,2,3,4);
p=&a;
cout<<"shape"<<endl;
p->printinfo();
p=&b;
cout<<"circle"<<endl;
p->printinfo();
p=&c;
cout<<"cylinder"<<endl;
p->printinfo();
return 0;
}
|
|