计算两点距离。成员函数 友元函数。全局函数
时间: 2023-09-15 14:20:06 浏览: 106
全局函数:
```c++
#include <cmath>
double distance(double x1, double y1, double x2, double y2) {
return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}
```
成员函数:
```c++
#include <cmath>
class Point {
public:
Point(double x, double y) : x_(x), y_(y) {}
double distance(Point other) {
return sqrt(pow(x_ - other.x_, 2) + pow(y_ - other.y_, 2));
}
private:
double x_;
double y_;
};
```
友元函数:
```c++
#include <cmath>
class Point {
public:
Point(double x, double y) : x_(x), y_(y) {}
friend double distance(Point p1, Point p2) {
return sqrt(pow(p1.x_ - p2.x_, 2) + pow(p1.y_ - p2.y_, 2));
}
private:
double x_;
double y_;
};
```
相关问题
综合设计(20分) 在平面坐标系里,定义描述点的类Point,加入一个友元函数计算2点间距离。定义 描述圆的类Circle,分别实现计算圆面积、以及计算圆心到某点的距离。π=3.14, 要求定义为静态数据成员
好的,我可以帮你解决这个问题。
以下是 Point 类和 Circle 类的实现代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.14;
class Point {
private:
double x;
double y;
public:
Point(double _x = 0, double _y = 0) : x(_x), y(_y) {}
friend double distance(const Point& a, const Point& b);
};
double distance(const Point& a, const Point& b) {
double dx = a.x - b.x;
double dy = a.y - b.y;
return sqrt(dx * dx + dy * dy);
}
class Circle {
private:
Point center;
double radius;
static double pi;
public:
Circle(const Point& _center = Point(), double _radius = 0) : center(_center), radius(_radius) {}
double area() const {
return pi * radius * radius;
}
double distance(const Point& p) const {
return ::distance(center, p);
}
};
double Circle::pi = PI;
int main() {
Point p1(0, 0);
Point p2(3, 4);
cout << "Distance between p1 and p2 is " << distance(p1, p2) << endl;
Circle c(Point(1, 1), 2);
cout << "Area of the circle is " << c.area() << endl;
Point p3(4, 5);
cout << "Distance between center and p3 is " << c.distance(p3) << endl;
return 0;
}
```
在这个实现中,Point 类包含两个私有数据成员 x 和 y,表示点的坐标。它还有一个友元函数 distance,用来计算两个点之间的距离。
Circle 类包含一个私有数据成员 center,表示圆的中心点,以及一个私有数据成员 radius,表示圆的半径。它还有一个静态数据成员 pi,表示圆周率。它的成员函数 area 用来计算圆面积,成员函数 distance 用来计算圆心到某点的距离。在 distance 函数中,我们使用了全局作用域解析运算符 :: 来调用 distance 友元函数。
在 main 函数中,我们创建了两个点 p1 和 p2,并计算了它们之间的距离。然后创建了一个圆 c,计算了它的面积,并计算了圆心到另一个点 p3 的距离。
希望这个实现能够解决你的问题。
用 C++ 设计一个名为Rectangle的矩形类,其私有属性为矩形的左上角和右下角两个点的坐标,成员函数能计算和输出矩形的周长,并统计程序中目前存在矩形类对象的个数,然后写一个友元函数求矩形的面积。
在C++中,我们可以设计一个名为`Rectangle`的类,用于表示矩形,包含左上角和右下角的坐标,同时也提供必要的功能如计算周长、面积,以及统计对象个数。以下是一个简单的实现:
```cpp
#include <iostream>
#include <vector>
class Point {
public:
int x, y;
Point(int x, int y) : x(x), y(y) {}
};
class Rectangle {
private:
Point topLeft, bottomRight; // 私有属性
static int count; // 计数器
public:
Rectangle(Point tl, Point br) : topLeft(tl), bottomRight(br) {
++count; // 矩形对象增加计数
}
// 计算周长
int perimeter() const {
return 2 * (topLeft.x + bottomRight.x + bottomRight.y - topLeft.y);
}
// 输出矩形周长
void printPerimeter() const {
std::cout << "Perimeter: " << perimeter() << std::endl;
}
// 友元函数,计算面积
friend int area();
// 统计对象个数
static int getRectangleCount() {
return count;
}
// 显示矩形区域
void display() const {
std::cout << "Top Left: (" << topLeft.x << ", " << topLeft.y << ")"
<< ", Bottom Right: (" << bottomRight.x << ", " << bottomRight.y << ")" << std::endl;
}
};
int Rectangle::count = 0; // 初始化矩形对象计数器
// 友元函数实现面积计算
int Rectangle::area() const {
return (bottomRight.x - topLeft.x) * (bottomRight.y - topLeft.y);
}
int main() {
Rectangle rect1(Point(0, 0), Point(5, 4));
rect1.printPerimeter();
rect1.display();
std::cout << "Total rectangles: " << Rectangle::getRectangleCount() << std::endl;
Rectangle rect2(Point(3, 3), Point(7, 7));
rect2.printPerimeter();
rect2.display();
std::cout << "Total rectangles: " << Rectangle::getRectangleCount() << std::endl;
return 0;
}
```
在这个例子中,`Rectangle`类包含两个私有`Point`类型的变量,代表矩形的边界。它有一个友元函数`area()`用于计算面积,一个全局变量`count`用于记录矩形对象的数量,并且提供了`perimeter()`、`printPerimeter()`和`getRectangleCount()`方法。在`main`函数中,我们创建了两个`Rectangle`对象并显示了相关信息。
阅读全文