class Line; class Point{ public: friend Line; Point (double &p1,double &p2){ start=p1; end=p2; } private: double start,end; }; class Line{ public: Line(const Point &p1,const Point &p2){ a=(p2.end-p1.end)/(p2.start-p1.start); } double slope(){ return a; } private: double a; };
时间: 2024-02-19 10:00:12 浏览: 61
这段代码定义了两个类,Point和Line。Point类表示一个二维平面上的点,Line类表示一个直线。
在Point类中,start和end是私有成员变量,表示点的坐标。Point类的构造函数接受两个double类型的参数p1和p2,分别表示点的x坐标和y坐标,并将它们存储在start和end成员变量中。注意,Line类被声明为Point类的友元,这意味着Line类可以访问Point类的私有成员变量。
在Line类中,a是私有成员变量,表示直线的斜率。Line类的构造函数接受两个Point类型的参数p1和p2,表示直线上的两个点。构造函数计算出直线的斜率,并将其存储在a成员变量中。Line类还定义了一个公共成员函数slope(),用于返回直线的斜率。
需要注意的是,Line类中的构造函数使用了Point类的私有成员变量start和end来计算直线的斜率。这是因为Line类被声明为Point类的友元,所以可以访问Point类的私有成员变量。
相关问题
请阅读下面的程序,请在空白处填写正确的代码,以求算两点之间的距离。 #include <iostream> using namespace std; class Point { public: Point(double a, double b){ x = a, y = b; } friend double dist(Point& d1, Point& d2); //友元函数 private: double x, y; }; double dist(Point& d1, Point& d2) { double s; double dx = d1.x - d2.x; double dy = d1.y - d2.y; ; return s; } int main( ) { Point p1(1.0, 2.0), p2(4.0, 6.0); double d; ; cout << "p1, p2 distance = " << d << endl; return 1; }
下面是空白处的正确代码:
```
s = sqrt(dx * dx + dy * dy);
```
将其添加到 `dist()` 函数中即可。`sqrt()` 函数需要 `#include <cmath>` 库。同时在 `main()` 函数中要调用 `dist()` 函数并将其返回值赋给变量 `d`:
```
d = dist(p1, p2);
```
完整代码如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
Point(double a, double b) {
x = a, y = b;
}
friend double dist(Point& d1, Point& d2);
private:
double x, y;
};
double dist(Point& d1, Point& d2) {
double s;
double dx = d1.x - d2.x;
double dy = d1.y - d2.y;
s = sqrt(dx * dx + dy * dy);
return s;
}
int main() {
Point p1(1.0, 2.0), p2(4.0, 6.0);
double d;
d = dist(p1, p2);
cout << "p1, p2 distance = " << d << endl;
return 1;
}
```
输出结果为:
```
p1, p2 distance = 5
```
定义一个二维坐标点类Point 数据成员(访问权限定义为protected): 横坐标、纵坐标 成员函数(访问权限定义为public): 带默认参数的构造函数:数据成员初始化 Point(double _x = 0.0, double _y = 0.0); 拷贝构造函数:数据成员初始化 Point(const Point &point); 设置横坐标 设置纵坐标 获取横坐标(定义为const成员函数) 获取纵坐标(定义为const成员函数) 打印点的坐标信息(定义为const成员函数),格式:(x, y) 要求:将类的定义与类成员函数的实现分开。 定义一个普通函数用来计算两个Point对象的距离: double pdistance(const Point &p1, const Point &p2); 并将pdistance函数声明为类Point的友元函数,使其能够直接访问Point的保护数据成员。 定义一个普通函数用来计算两个Point对象的中点: Point midpoint(const Point &p1, const Point &p2); 并将midpoint函数声明为类Point的友元函数,使其能够直接访问Point的保护数据成员。
类Point的定义:
```c++
class Point {
protected:
double x;
double y;
public:
Point(double _x = 0.0, double _y = 0.0);
Point(const Point &point);
void setX(double _x);
void setY(double _y);
double getX() const;
double getY() const;
void print() const;
friend double pdistance(const Point &p1, const Point &p2);
friend Point midpoint(const Point &p1, const Point &p2);
};
```
类Point的实现:
```c++
Point::Point(double _x, double _y) : x(_x), y(_y) {}
Point::Point(const Point &point) {
x = point.x;
y = point.y;
}
void Point::setX(double _x) {
x = _x;
}
void Point::setY(double _y) {
y = _y;
}
double Point::getX() const {
return x;
}
double Point::getY() const {
return y;
}
void Point::print() const {
cout << "(" << x << ", " << y << ")" << endl;
}
double pdistance(const Point &p1, const Point &p2) {
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return sqrt(dx * dx + dy * dy);
}
Point midpoint(const Point &p1, const Point &p2) {
double mx = (p1.x + p2.x) / 2.0;
double my = (p1.y + p2.y) / 2.0;
return Point(mx, my);
}
```
阅读全文