用c++语言定义点类Point,有两个double 类型的数据成员x 和y,分别表示横坐标和纵 坐标,要求完成如下内容。 (1)定义坐标默认值为原点(0.0,0.0)的构造函数。 (2)以成员函数形式重载:前置“++”运算符和双目运算符“−”。 (3)用友元函数形式重载:双目运算符“+”、插 入运算符。 (4)先根据main()主函数代码和运行结果,补充类的定义和相关函数的定义,写出完 整程序。
时间: 2024-02-24 14:56:11 浏览: 287
根据你的要求,定义如下:
```
#include <iostream>
using namespace std;
class Point {
private:
double x;
double y;
public:
Point(double x = 0.0, double y = 0.0) : x(x), y(y) {} // (1)
Point operator++(); // (2)
Point operator- (const Point& p); // (2)
friend Point operator+ (const Point& p1, const Point& p2); // (3)
friend ostream& operator<< (ostream& out, const Point& p); // (3)
};
Point Point::operator++() {
++x;
++y;
return *this;
}
Point Point::operator-(const Point& p) {
return Point(x - p.x, y - p.y);
}
Point operator+(const Point& p1, const Point& p2) {
return Point(p1.x + p2.x, p1.y + p2.y);
}
ostream& operator<<(ostream& out, const Point& p) {
out << "(" << p.x << ", " << p.y << ")";
return out;
}
int main() {
Point p1(1.0, 2.0);
Point p2(3.0, 4.0);
Point p3 = p1 + p2;
cout << p1 << "+" << p2 << "=" << p3 << endl;
Point p4 = ++p1;
cout << "++" << p1 << "=" << p4 << endl;
Point p5 = p1 - p2;
cout << p1 << "-" << p2 << "=" << p5 << endl;
return 0;
}
```
在上面的代码中:
- `(1)` 定义了一个带有默认参数的构造函数,用于创建 Point 类的对象。
- `(2)` 以成员函数形式重载了前置“++”运算符和双目运算符“−”。
- `(3)` 用友元函数形式重载了双目运算符“+”和插入运算符。
在 `main` 函数中,我们创建了两个 Point 对象 `p1` 和 `p2`,并使用重载的双目运算符“+”来计算它们的和。我们还使用重载的前置“++”运算符对 `p1` 进行自增操作,并使用重载的双目运算符“−”来计算 `p1` 和 `p2` 之间的差。最后,我们使用重载的插入运算符将 `p1`、`p2`、`p3`、`p4` 和 `p5` 的值输出到标准输出流中。
输出结果为:
```
(1, 2)+(3, 4)=(4, 6)
++(2, 3)=(3, 4)
(3, 4)-(3, 4)=(0, 0)
```
阅读全文