Point&Point:: operator++(){ x++; y++; z++; return *this; } Point Point::operator++(int){ ++(*this); return *this; 这个代码的解释
时间: 2023-08-16 12:03:46 浏览: 86
这段代码实现了 `Point` 类型的对象的自增运算符(前置自增和后置自增)重载。
其中前置自增运算符 `operator++()` 会将 `x`、`y`、`z` 三个成员变量分别加 1,并且返回对象本身的引用。
后置自增运算符 `operator++(int)` 使用了后置自增的形式,即在参数列表中添加了一个 `int` 类型的占位符,但实际上该参数没有被使用。在函数体中,它通过调用前置自增运算符 `++(*this)` 来实现自增,并返回对象本身的拷贝。
需要注意的是,前置自增运算符返回的是对象本身的引用,而后置自增运算符返回的是对象本身的拷贝。这是因为后置自增运算符需要在自增之前返回对象的原始值,而前置自增运算符则不需要这么做。
相关问题
Point& Point::operator++() { _x++; _y++; return *this; } Point Point::operator++(int) { Point tmp(*this); _x++; _y++; return tmp; } Point& Point::operator--() { _x--; _y--; return *this; } Point Point::operator--(int) { Point tmp(*this); _x--; _y--; return tmp; }
这段代码是Point类中重载了前缀和后缀自增自减运算符的实现。
- 前缀自增运算符++i:先将对象的值加1,再返回对象的引用。
- 后缀自增运算符i++:先返回对象的原值,再将对象的值加1。
- 前缀自减运算符--i:先将对象的值减1,再返回对象的引用。
- 后缀自减运算符i--:先返回对象的原值,再将对象的值减1。
具体实现方式如下:
```c++
Point& Point::operator++() {
_x++;
_y++;
return *this;
}
Point Point::operator++(int) {
Point tmp(*this);
_x++;
_y++;
return tmp;
}
Point& Point::operator--() {
_x--;
_y--;
return *this;
}
Point Point::operator--(int) {
Point tmp(*this);
_x--;
_y--;
return tmp;
}
```
其中,前缀自增和前缀自减运算符需要返回对象的引用,以支持连续进行多个自增和自减操作,而后缀自增和后缀自减运算符需要返回对象的原值,以保持其原有的值不变。
例如,p++操作的实现方式是先创建一个临时对象tmp,将当前对象的值赋给tmp,然后将当前对象的值加1,最后返回tmp对象。而++p操作的实现方式是先将当前对象的值加1,然后返回当前对象的引用。
error: ‘Point& Point::operator++()’ cannot be overloaded Point &operator++(){
这个错误提示表示在 C++ 中,你试图重载 `Point` 类的 `operator++()` 运算符,但是编译器拒绝了这个尝试。通常,编译器不允许重载运算符 `operator++()` 和 `operator--()` 因为它们是特殊的成员运算符,它们的操作默认已经在标准库中定义好了,比如对内置类型的自增和自减。
对于内置类型如 `int` 或 `double`,你可以在类中重载这些运算符,但对于用户定义的对象,C++ 保证了它们的行为(即简单地更新对象自身的值)。如果你试图覆盖这个默认行为,你需要使用 `std::pre increment` (`++obj`) 和 `std::post increment` (`obj++`) 这样的形式,并显式地返回一个新的对象,而不是修改当前对象。
例如,正确的做法可能是:
```cpp
class Point {
public:
Point& preIncrement() {
_x++;
_y++;
return *this;
}
Point postIncrement() const {
Point temp(*this);
_x++;
_y++;
return temp;
}
private:
double _x;
double _y;
};
```
这里,`preIncrement()` 返回的是一个引用自身,改变了原对象的值,而 `postIncrement()` 创建了一个新的 `Point` 对象,保留了原始状态。
阅读全文