设计一个圆形类Circle 它有3个私有数据成员:x ,y (圆心坐标)r(半径)重载运算符➕ 使之能计算圆形的面积之和
时间: 2023-12-10 08:38:01 浏览: 84
下面是Circle类的实现:
```c++
#include <cmath>
using namespace std;
class Circle {
private:
double x; // 圆心横坐标
double y; // 圆心纵坐标
double r; // 半径
public:
Circle(double x, double y, double r) : x(x), y(y), r(r) {}
// 计算圆形面积
double area() const {
return M_PI * r * r;
}
// 重载加号运算符
Circle operator+(const Circle& other) const {
double newX = (x + other.x) / 2;
double newY = (y + other.y) / 2;
double newR = sqrt(area() + other.area()) / M_PI;
return Circle(newX, newY, newR);
}
};
```
这里使用了C++的数学库cmath中的M_PI常量表示π。在重载加号运算符时,可以先计算出两个圆的面积之和,然后再根据公式 $S = \pi r^2$ 计算出新圆的半径。
相关问题
重载>>为circle类的友元函数
好的,下面是重载>>为circle类的友元函数的示例代码:
```
#include <iostream>
using namespace std;
class circle {
private:
double radius;
public:
circle(double r) {
radius = r;
}
friend istream& operator>>(istream& input, circle& c);
};
istream& operator>>(istream& input, circle& c) {
input >> c.radius;
return input;
}
int main() {
circle c(0);
cout << "请输入圆的半径:" << endl;
cin >> c;
cout << "圆的半径为:" << c.radius << endl;
return 0;
}
```
在这个示例中,我们定义了一个circle类,其中包含一个私有成员变量radius和一个构造函数。我们还定义了一个重载>>为circle类的友元函数。
在主函数中,我们创建了一个圆对象c,并提示用户输入圆的半径。然后,我们使用重载>>运算符将用户输入的值存储在圆对象的radius成员变量中,并输出圆的半径。
需要注意的是,在重载>>运算符时,我们将circle类声明为友元,以便在函数中访问其私有成员变量。
重载<<为circle类的友元函数
好的,下面是重载<<为circle类的友元函数的示例代码:
```c++
#include <iostream>
using namespace std;
const double PI = 3.14159265358979323846;
class circle {
private:
double radius;
public:
circle(double r) {
radius = r;
}
friend ostream& operator<<(ostream& output, const circle& c);
};
ostream& operator<<(ostream& output, const circle& c) {
output << "圆的半径为:" << c.radius << endl;
output << "圆的周长为:" << 2 * PI * c.radius << endl;
output << "圆的面积为:" << PI * c.radius * c.radius << endl;
return output;
}
int main() {
circle c(5.5);
cout << c;
return 0;
}
```
在这个示例中,我们定义了一个circle类,其中包含一个私有成员变量radius和一个构造函数。我们还定义了一个重载<<为circle类的友元函数。
在主函数中,我们创建了一个圆对象c,并将其输出到控制台。由于我们重载了<<运算符,因此可以使用cout来输出圆对象。在重载<<运算符时,我们将circle类声明为友元,以便在函数中访问其私有成员变量。函数中输出了圆的半径、周长和面积。
需要注意的是,在重载<<运算符时,我们将circle类对象声明为const,以便防止对其进行修改。
阅读全文