定义Point类,有坐标x,y两个私有成员变量;对Point类重载“++”(自增)、“--”(自减)和“==”(相等)运算符,实现对坐标值的改变,要求用友元函数和成员函数两种方法实现。
时间: 2024-12-20 12:27:34 浏览: 16
在C++中,可以定义一个名为`Point`的类,其中包含`x`和`y`两个私有成员变量,并利用友元函数和成员函数来重载自增(`++`)、自减(--)和相等(`==`)运算符,以便能够直接操作坐标值。
**定义Point类及友元函数实现:**
```cpp
class Point {
private:
int x;
int y;
public:
// 构造函数
Point(int x = 0, int y = 0) : x(x), y(y) {}
// 自增运算符++,友元函数
friend Point& increment<Point>(Point& p) { return ++p; }
friend Point decrement<Point>(Point& p) { return --p; }
// 相等运算符==,友元函数
friend bool equal(const Point& a, const Point& b) { return a == b; }
// 成员函数,获取和设置坐标
int getX() const { return x; }
void setX(int newX) { x = newX; }
int getY() const { return y; }
void setY(int newY) { y = newY; }
};
// 实现自增和自减友元函数
template <typename T>
T& increment(T& obj) {
++obj.x;
++obj.y;
return obj;
}
template <typename T>
T decrement(T& obj) {
--obj.x;
--obj.y;
return obj;
}
```
**成员函数实现:**
如果想要完全使用成员函数实现,可以将运算符作为类内成员函数:
```cpp
class Point {
private:
int x;
int y;
public:
// ... (其他成员函数)
// 自增运算符++
Point& operator++() {
x++;
y++;
return *this;
}
// 自减运算符--
Point& operator--() {
x--;
y--;
return *this;
}
// 相等运算符==
bool operator==(const Point& other) const {
return x == other.x && y == other.y;
}
};
//... (其他成员函数)
```
以上两种方法都可以满足你的需求,友元函数适用于需要外部访问私有数据的情况,而成员函数则直接作用于对象自身。
阅读全文