建立• - 个Point (点)类, 包含数据成员xy (坐标点), 。以它为基类,派生出一个Circle(圆) 类,增加数据成员r(半径), 再以Circle类为直接基 类 派生出• 个Cylinder(圆柱体)类,在增加数据 成员h(高), ,要求编写程序, 重载运算符么<”和 6>> 求解圆的面积和圆柱体体积。
时间: 2024-03-09 21:48:25 浏览: 73
好的,我可以帮你解决这个问题。以下是代码实现:
```c++
#include <iostream>
using namespace std;
const double PI = 3.1415926535; // 定义圆周率
class Point {
public:
double x, y;
Point(double x = 0, double y = 0): x(x), y(y) {}
};
class Circle: public Point {
public:
double r;
Circle(double x = 0, double y = 0, double r = 0): Point(x, y), r(r) {}
double area() { // 求圆面积
return PI * r * r;
}
};
class Cylinder: public Circle {
public:
double h;
Cylinder(double x = 0, double y = 0, double r = 0, double h = 0): Circle(x, y, r), h(h) {}
double volume() { // 求圆柱体体积
return area() * h;
}
};
// 重载运算符<<,用于输出圆的面积和圆柱体的体积
ostream& operator<<(ostream& output, Circle& c) {
output << "Circle area: " << c.area() << endl;
return output;
}
ostream& operator<<(ostream& output, Cylinder& cy) {
output << "Cylinder volume: " << cy.volume() << endl;
return output;
}
// 重载运算符>>, 用于输入圆的坐标和半径,以及圆柱体的高度
istream& operator>>(istream& input, Circle& c) {
input >> c.x >> c.y >> c.r;
return input;
}
istream& operator>>(istream& input, Cylinder& cy) {
input >> cy.x >> cy.y >> cy.r >> cy.h;
return input;
}
int main() {
Circle c;
Cylinder cy;
cout << "Enter circle's x, y, r: ";
cin >> c;
cout << c; // 输出圆的面积
cout << "Enter cylinder's x, y, r, h: ";
cin >> cy;
cout << cy; // 输出圆柱体的体积
return 0;
}
```
以上代码中,我们定义了 Point 类表示二维坐标点,Circle 类表示圆,Cylinder 类表示圆柱体。Circle 类继承自 Point 类,Cylinder 类继承自 Circle 类。我们重载了运算符<<和>>,以便于输入和输出圆和圆柱体的信息。在主函数中,我们分别输入圆和圆柱体的信息,并输出它们的面积和体积。
阅读全文