先建立一个Point(点)类,包含数据成员x,y(坐标点)。以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,在增加数据成员h(高)。要求编写程序,重载运算符“<<”和“>>”,求解圆的面积和圆柱体体积。
时间: 2024-03-09 22:47:59 浏览: 19
好的,我会为您解答这个问题。
首先,我们可以先定义一个Point类,包含数据成员x和y,以及重载运算符">>"和"<<",用于输入和输出坐标点的信息。
```C++
#include<iostream>
using namespace std;
class Point{
protected:
double x, y;
public:
Point(double _x=0, double _y=0): x(_x), y(_y){}
friend istream& operator>>(istream& in, Point& p){
cout<<"请输入坐标点(x,y): ";
in>>p.x>>p.y;
return in;
}
friend ostream& operator<<(ostream& out, const Point& p){
out<<"("<<p.x<<","<<p.y<<")";
return out;
}
};
```
接下来,我们可以定义一个Circle类,继承自Point类,并增加数据成员r,以及重载运算符">>"和"<<",用于输入和输出圆的信息。
```C++
class Circle: public Point{
protected:
double r;
public:
Circle(double _x=0, double _y=0, double _r=0): Point(_x, _y), r(_r){}
friend istream& operator>>(istream& in, Circle& c){
in>>dynamic_cast<Point&>(c);
cout<<"请输入圆的半径: ";
in>>c.r;
return in;
}
friend ostream& operator<<(ostream& out, const Circle& c){
out<<"圆心坐标为"<<dynamic_cast<const Point&>(c)<<",半径为"<<c.r;
return out;
}
double area(){ //计算圆的面积
return 3.1415926*r*r;
}
};
```
最后,我们可以定义一个Cylinder类,继承自Circle类,并增加数据成员h,以及重载运算符">>"和"<<",用于输入和输出圆柱体的信息。
```C++
class Cylinder: public Circle{
private:
double h;
public:
Cylinder(double _x=0, double _y=0, double _r=0, double _h=0): Circle(_x, _y, _r), h(_h){}
friend istream& operator>>(istream& in, Cylinder& cy){
in>>dynamic_cast<Circle&>(cy);
cout<<"请输入圆柱体的高: ";
in>>cy.h;
return in;
}
friend ostream& operator<<(ostream& out, const Cylinder& cy){
out<<"圆柱体的底面信息为:"<<dynamic_cast<const Circle&>(cy)<<",高为"<<cy.h;
return out;
}
double volume(){ //计算圆柱体的体积
return Circle::area()*h;
}
};
```
现在,我们可以在主函数中输入圆柱体的信息,并计算圆的面积和圆柱体的体积。
```C++
int main(){
Cylinder cy;
cin>>cy;
cout<<cy<<endl;
cout<<"圆的面积为:"<<cy.area()<<endl;
cout<<"圆柱体的体积为:"<<cy.volume()<<endl;
return 0;
}
```
这样,程序就完成了。