题目:
一个圆可以由圆心坐标和半径确定,试在类Point的基础上,采用组合类方法定义并实现一个表示圆的类Circle。
一种解法(仅供参考):
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
class Point {
public:
double x, y;
Point(double x = 0, double y = 0) : x(x), y(y) {}
};
class Circle {
public:
Circle(Point center = Point(), double radius = 0) : center(center), radius(radius) {}
double area() {
return M_PI * radius * radius;
}
double perimeter() {
return 2 * M_PI * radius;
}
private:
Point center;
double radius;
};
int main() {
// 创建一个圆
Point p(1, 2);
Circle c(p, 5);
// 计算圆的面积和周长
std::cout << "圆的面积为:" << c.area() << std::endl;
std::cout << "圆的周长为:" << c.perimeter() << std::endl;
return 0;
}
一些补充说明:
在上述代码中,我们采用了组合的方式,在Circle类中包含一个Point对象,表示圆心的坐标。Circle类有两个属性center和radius,分别表示圆心和半径。它还有两个方法area和perimeter分别计算圆的面积和周长。
运行结果如图所示:
需要注意的是,上述代码中计算圆的面积和周长使用了C++标准库中的常量M_PI,它表示圆周率π的值。在使用时需要加入头文件cmath。
但是,有些版本的VS只加入头文件是不够的,会出现下图的结果:
如果出现这样的问题之后,我们只需加上一行#define _USE_MATH_DEFINES即可运行。