5. 编写一个表示圆的类Circle。要求如下: 1)用一个私有常成员r 表示半径; 2)用私有成员变量x,y 表示圆心坐标; 3)用一个静态变量count 表示圆对象的个数; 4)用一个静态常成员PI 表示圆周率; 5)在默认构造函数中初始化x = 0, y = 0, r=1; 6)编写公有成员函数,分别返回圆的半径和面积 7)编写公有静态成员函数,返回圆对象的数目。 8)定义一个计算圆心距离的函数 calcDistance,两个参数为圆对象的常引用, 返回两圆的圆心距离,要求在类中声明该函数为友元函数。
时间: 2023-11-28 10:50:37 浏览: 193
下面是Circle类的实现:
```c++
#include <cmath>
class Circle {
private:
const double r; // 半径
double x; // 圆心x坐标
double y; // 圆心y坐标
static int count; // 圆对象的个数
static const double PI; // 圆周率
public:
Circle() : r(1), x(0), y(0) { count++; } // 默认构造函数
Circle(double r_, double x_, double y_) : r(r_), x(x_), y(y_) { count++; } // 带参数构造函数
double getRadius() const { return r; } // 返回半径
double getArea() const { return PI * r * r; } // 返回面积
static int getCount() { return count; } // 返回圆对象的数目
friend double calcDistance(const Circle& c1, const Circle& c2); // 友元函数
};
int Circle::count = 0; // 初始化静态成员变量
const double Circle::PI = 3.14159265358979323846; // 初始化静态常成员变量
// 计算圆心距离的友元函数
double calcDistance(const Circle& c1, const Circle& c2) {
double dx = c1.x - c2.x;
double dy = c1.y - c2.y;
return sqrt(dx*dx + dy*dy);
}
```
使用示例:
```c++
#include <iostream>
using namespace std;
int main() {
Circle c1; // 创建默认圆
Circle c2(2.5, 1.0, 1.0); // 创建半径为2.5,圆心坐标为(1,1)的圆
cout << "圆c1的半径为:" << c1.getRadius() << endl;
cout << "圆c1的面积为:" << c1.getArea() << endl;
cout << "圆c2的半径为:" << c2.getRadius() << endl;
cout << "圆c2的面积为:" << c2.getArea() << endl;
cout << "圆对象的数目为:" << Circle::getCount() << endl;
cout << "两圆的圆心距离为:" << calcDistance(c1, c2) << endl;
return 0;
}
```
阅读全文