编写程序声明Point类,在类中声明整型的私有成员变量_x,_y,声明成员函数Point&operator++();Point&operator++(int);以实现对Point类重载“++”运算符,声明成员函数Point&operator–();Point&operator–(int);以实现对Point类重载“–”运算符,实现对坐标值的改变。
时间: 2023-12-20 21:06:50 浏览: 75
以下是Point类的代码实现:
```c++
class Point {
private:
int _x, _y;
public:
Point(int x, int y) : _x(x), _y(y) {}
Point& operator++() {
_x++;
_y++;
return *this;
}
Point operator++(int) {
Point tmp(_x, _y);
++(*this);
return tmp;
}
Point& operator--() {
_x--;
_y--;
return *this;
}
Point operator--(int) {
Point tmp(_x, _y);
--(*this);
return tmp;
}
};
```
在上述代码中,我们定义了一个Point类,其中包含了两个私有成员变量_x和_y,代表点的横纵坐标。我们使用构造函数初始化这些成员变量。
接下来,我们定义了四个重载运算符的成员函数,分别是前缀和后缀版本的“++”和“--”运算符。这些函数改变了我们Point对象的坐标值,并返回一个引用或者一个新的Point对象。
前缀版本的“++”和“--”运算符直接改变了对象的坐标值,并返回一个引用,因此我们可以进行链式调用,例如:`++p1; --p1;` 。
后缀版本的“++”和“--”运算符返回一个新的Point对象,因为在这种情况下我们需要先创建一个临时对象,将其坐标值设置为原始对象的坐标值,再将原始对象的坐标值加一或减一。这种实现方式更加符合运算符的原始定义,但是需要额外的开销。
最后,我们可以通过如下代码来测试我们的Point类:
```c++
int main() {
Point p1(0, 0);
cout << "p1: (" << p1.getX() << ", " << p1.getY() << ")" << endl;
++p1;
cout << "p1 after prefix ++: (" << p1.getX() << ", " << p1.getY() << ")" << endl;
p1++;
cout << "p1 after postfix ++: (" << p1.getX() << ", " << p1.getY() << ")" << endl;
--p1;
cout << "p1 after prefix --: (" << p1.getX() << ", " << p1.getY() << ")" << endl;
p1--;
cout << "p1 after postfix --: (" << p1.getX() << ", " << p1.getY() << ")" << endl;
return 0;
}
```
阅读全文