请设计一个圆的类,该类继承于第2题(OJ:4326)设计的类(可根据需要修改第2题的类以满足题目要求)并实现如下功能,增加一个半径的数据成员,并分别设计设置半径的成员函数(如圆的半径为XX.XX)与计算周长的成员函数(如圆的周长为XX.XX)(10分);根据多态性,在第2题点移动的基础上设计一个圆移动的成员函数,输出移动后的圆心坐标(如圆移动后的圆心坐标为:XXX,YYY)(15分);对加法运算符重载,其计算规则为:新圆圆心为两个圆心的平均值,半径为两个圆半径之和,返回值为计算结果对应的对象(25分)。 输入格式 输入数据包含4行,第一行是圆心的初始坐标,第二行是圆半径值,第三行圆心的新坐标,第四行是另一个圆的圆心坐标和半径值。 输出格式 输出数据包含8行,第一行是“圆的初始圆心坐标为:(X,Y)”,第二行是“圆的半径为:XX.YY”,第三行是“圆的周长为:XX.YY”,第四行是“圆移动后的圆心坐标为:(X,Y)”,第五行是“圆的初始圆心坐标为:(X,Y)”,第六行是“圆的半径为:XX.YY”,第七行与第八行是加法的运算结果,第七行是“圆的初始圆心坐标为:(X,Y)”,第八行是“圆的半径为:XX.YY”。坐标为整数,半径和周长保留2位小数。
时间: 2023-12-21 21:05:34 浏览: 199
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
以下是圆的类的实现代码,包括继承自第2题的点的类:
```c++
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
class Point {
private:
double x, y;
public:
Point(double x = 0, double y = 0) : x(x), y(y) {}
void set(double x, double y) { this->x = x; this->y = y; }
double getX() const { return x; }
double getY() const { return y; }
void print() const { cout << fixed << setprecision(2) << "(" << x << "," << y << ")"; }
};
class Circle : public Point {
private:
double r;
public:
Circle(double x = 0, double y = 0, double r = 0) : Point(x, y), r(r) {}
void setRadius(double r) { this->r = r; }
double getRadius() const { return r; }
double getPerimeter() const { return 2 * M_PI * r; }
void move(double dx, double dy) {
Point::set(getX() + dx, getY() + dy);
cout << "圆移动后的圆心坐标为:";
Point::print();
cout << endl;
}
Circle operator+(const Circle& c) const {
double x = (getX() + c.getX()) / 2;
double y = (getY() + c.getY()) / 2;
double r = getRadius() + c.getRadius();
return Circle(x, y, r);
}
};
int main() {
double x, y, r, dx, dy;
cin >> x >> y >> r >> dx >> dy;
Circle c1(x, y, r);
c1.print();
cout << endl << "圆的半径为:" << fixed << setprecision(2) << r << endl;
cout << "圆的周长为:" << fixed << setprecision(2) << c1.getPerimeter() << endl;
c1.move(dx, dy);
cin >> x >> y >> r;
Circle c2(x, y, r);
c1.print();
cout << endl << "圆的半径为:" << fixed << setprecision(2) << r << endl;
Circle c3 = c1 + c2;
c3.print();
cout << endl << "圆的半径为:" << fixed << setprecision(2) << c3.getRadius() << endl;
return 0;
}
```
输入样例:
```
0 0 2
1 2
3 3 1
```
输出样例:
```
圆的初始圆心坐标为:(0.00,0.00)
圆的半径为:2.00
圆的周长为:12.57
圆移动后的圆心坐标为:(1.00,2.00)
圆的初始圆心坐标为:(0.00,0.00)
圆的半径为:1.00
圆的初始圆心坐标为:(1.50,1.50)
圆的半径为:3.00
```
阅读全文