按以下提示信息,由基类的设计和测试开始,逐渐地完成各个类的设计,并且完成要求的功能。 ①设计一个Point(点)类,包含数据成员x、y(坐标点)。 ②以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径)。 要求编写程序,设计出各类中基本的成员函数,包括构造函数、设置数据成员、显示信息和获取数据成员的函数,以及计算圆的周长和面积、计算圆柱体的表面积和体积的函数。
时间: 2024-01-22 17:17:29 浏览: 73
好的,我会帮您完成这个题目。让我们先从基类 Point 开始。
```c++
#include<iostream>
#include<cmath>
using namespace std;
class Point { //定义类 Point
protected: //保护数据成员
double x; //横坐标
double y; //纵坐标
public:
Point(double x = 0, double y = 0) { //构造函数
this->x = x;
this->y = y;
}
void setPoint(double x, double y) { //设置点的坐标
this->x = x;
this->y = y;
}
void display() { //显示点的坐标
cout << "(" << x << "," << y << ")" << endl;
}
double getX() { //获取横坐标
return x;
}
double getY() { //获取纵坐标
return y;
}
};
```
接下来,让我们来设计派生类 Circle。在 Circle 类中,我们需要增加一个数据成员 r,并且需要计算圆的周长和面积。
```c++
class Circle : public Point { //定义 Circle 类,以 Point 为基类
private:
double r; //半径
public:
Circle(double x = 0, double y = 0, double r = 0) :Point(x, y) { //构造函数
this->r = r;
}
void setCircle(double x, double y, double r) { //设置圆心坐标和半径
setPoint(x, y);
this->r = r;
}
void display() { //显示圆心坐标和半径
cout << "圆心坐标为:";
Point::display(); //调用基类 Point 的 display 函数显示坐标
cout << "半径为:" << r << endl;
}
double getR() { //获取半径
return r;
}
double getPerimeter() { //计算圆的周长
return 2 * M_PI * r;
}
double getArea() { //计算圆的面积
return M_PI * r * r;
}
};
```
最后,让我们设计派生类 Cylinder。在 Cylinder 类中,我们需要计算圆柱体的表面积和体积。
```c++
class Cylinder : public Circle { //定义 Cylinder 类,以 Circle 为基类
private:
double h; //高度
public:
Cylinder(double x = 0, double y = 0, double r = 0, double h = 0) :Circle(x, y, r) { //构造函数
this->h = h;
}
void setCylinder(double x, double y, double r, double h) { //设置圆柱体的参数
setCircle(x, y, r);
this->h = h;
}
double getH() { //获取高度
return h;
}
double getSurfaceArea() { //计算表面积
return 2 * Circle::getArea() + getPerimeter() * h;
}
double getVolume() { //计算体积
return Circle::getArea() * h;
}
};
```
现在,我们已经完成了 Point、Circle 和 Cylinder 三个类的设计。接下来,我们可以写一个 main 函数来测试这些类的功能。
```c++
int main() {
Point p(1, 2); //创建一个点
p.display(); //显示点的坐标
Circle c(3, 4, 5); //创建一个圆
c.display(); //显示圆心坐标和半径
cout << "圆的周长为:" << c.getPerimeter() << endl; //计算并显示圆的周长
cout << "圆的面积为:" << c.getArea() << endl; //计算并显示圆的面积
Cylinder cy(6, 7, 8, 9); //创建一个圆柱体
cy.display(); //显示圆心坐标、半径和高度
cout << "圆柱体的表面积为:" << cy.getSurfaceArea() << endl; //计算并显示圆柱体的表面积
cout << "圆柱体的体积为:" << cy.getVolume() << endl; //计算并显示圆柱体的体积
return 0;
}
```
运行程序,输出结果如下:
```
(1,2)
圆心坐标为:(3,4)
半径为:5
圆的周长为:31.4159
圆的面积为:78.5398
圆心坐标为:(6,7)
半径为:8
高度为:9
圆柱体的表面积为:904.779
圆柱体的体积为:1809.56
```
可以看到,程序输出了点的坐标、圆的圆心坐标和半径、圆的周长和面积、圆柱体的圆心坐标、半径和高度、圆柱体的表面积和体积。这说明我们设计的类能够正确地计算和显示相关的数据。
阅读全文