用c++写以下代码在main中测试MyPoint类的各个方法 1、定义MyLine类,表示二维坐标系中的一个直线段,成员如下: 1)成员变量p1、p2分别代表起点和终点,它们都是MyPoint类对象。 2)4个重载的构造方法: MyLine():使用坐标(0,0)->(0,0)构造并初始化。 MyLine(int x1,int y1,int x2,int y2):使用给定坐标构造并初始化。MyLine(MyPoint& p1,MyPoint&p2):用给定MyPoint对象构造并初始化。MyLine(const MyLine&I):拷贝构造方法 3)重新设定线段: void setLine(int x1,int y1,int x2,int y2) Void setLine(MyPoint& p1, MyPoint& p2) 4)访问、设置终始点: MyPoint&getP1():获得起点, void setP1(const MyPoint& p):设置起点MyPoint& getP2():获得终点, void setP2(const MyPoint&p):设置终点 5) double length():求线段长度 static double length(const MyLine&I):求给定线段的长度。 6)bool equals(MyLine&I):判断两个线段是否相等。 7) string show():得到此线段的字符串表示形式,类似格式为 “起点(20,30),终点(40,30),长度为20”。 说明:除了成员变量是private的,其它所有成员函数都是public的。
时间: 2024-02-28 19:55:07 浏览: 52
下面是代码实现:
```c++
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
class MyPoint{
private:
int x, y;
public:
MyPoint(): x(0), y(0){};
MyPoint(int x1, int y1): x(x1), y(y1){};
MyPoint(const MyPoint& p): x(p.x), y(p.y){};
int getX() const {return x;}
int getY() const {return y;}
void setX(int x1) {x = x1;}
void setY(int y1) {y = y1;}
string show() const {
return "(" + to_string(x) + ", " + to_string(y) + ")";
}
};
class MyLine{
private:
MyPoint p1, p2;
public:
MyLine(): p1(), p2(){};
MyLine(int x1, int y1, int x2, int y2): p1(x1, y1), p2(x2, y2){};
MyLine(MyPoint& p1, MyPoint& p2): p1(p1), p2(p2){};
MyLine(const MyLine& I): p1(I.p1), p2(I.p2){};
void setLine(int x1, int y1, int x2, int y2) {
p1.setX(x1);
p1.setY(y1);
p2.setX(x2);
p2.setY(y2);
}
void setLine(MyPoint& p1, MyPoint& p2) {
this->p1 = p1;
this->p2 = p2;
}
MyPoint& getP1() {return p1;}
void setP1(const MyPoint& p) {p1 = p;}
MyPoint& getP2() {return p2;}
void setP2(const MyPoint& p) {p2 = p;}
double length() const {
return sqrt(pow(p1.getX()-p2.getX(), 2) + pow(p1.getY()-p2.getY(), 2));
}
static double length(const MyLine& I) {
return I.length();
}
bool equals(MyLine& I) {
return (p1.getX() == I.p1.getX() && p1.getY() == I.p1.getY() && p2.getX() == I.p2.getX() && p2.getY() == I.p2.getY());
}
string show() const {
return "起点" + p1.show() + ",终点" + p2.show() + ",长度为" + to_string(length());
}
};
int main() {
MyPoint p1(1,1), p2(2,2), p3(3,3);
MyLine l1, l2(1,1,3,3), l3(p1,p2), l4(l2);
l1.setLine(0,0,4,4);
l1.setP1(p2);
l1.setP2(p3);
cout << l1.show() << endl;
cout << l2.show() << endl;
cout << l3.show() << endl;
cout << l4.show() << endl;
cout << "l1 length: " << l1.length() << endl;
cout << "l2 length: " << MyLine::length(l2) << endl;
cout << "l1 equals l2: " << l1.equals(l2) << endl;
cout << "l2 equals l3: " << l2.equals(l3) << endl;
return 0;
}
```
在上述代码中,我们定义了 MyPoint 类和 MyLine 类,其中 MyLine 类包含了题目要求的各个方法。在 main 函数中,我们分别测试了各个方法的正确性。
阅读全文