为复数类Complex重载运算符++和--,实现自己实部+1和-1。 1 要求实现前置++和后置++,前置--,后置-- 2 要求两个--运算可以连续调用成员函数,即主程序中(a--).show(); 能够正确显示a--的结果
时间: 2023-06-18 07:02:08 浏览: 154
下面是重载运算符++和--的Complex类的实现代码:
```c++
#include <iostream>
using namespace std;
class Complex {
private:
double real, imag;
public:
Complex(double r = 0, double i = 0) : real(r), imag(i) {}
Complex& operator++(); // 前置++
Complex operator++(int); // 后置++
Complex& operator--(); // 前置--
Complex operator--(int); // 后置--
void show() const {
cout << "(" << real << ", " << imag << ")" << endl;
}
};
Complex& Complex::operator++() {
real++;
return *this;
}
Complex Complex::operator++(int) {
Complex temp(*this);
real++;
return temp;
}
Complex& Complex::operator--() {
real--;
return *this;
}
Complex Complex::operator--(int) {
Complex temp(*this);
real--;
return temp;
}
int main() {
Complex a(1, 2);
(++a).show(); // 输出:(2, 2)
a.show(); // 输出:(2, 2)
(a++).show(); // 输出:(2, 2)
a.show(); // 输出:(3, 2)
(--a).show(); // 输出:(2, 2)
a.show(); // 输出:(2, 2)
(a--).show(); // 输出:(2, 2)
a.show(); // 输出:(1, 2)
(a--).show(); // 输出:(1, 2)
a.show(); // 输出:(0, 2)
return 0;
}
```
在上面的代码中,我们为Complex类重载了运算符++和--,包括前置++、后置++、前置--和后置--。对于前置++和前置--,我们直接修改实部real的值,并返回*this的引用;对于后置++和后置--,我们先用*this的值初始化一个临时对象temp,然后再修改实部real的值,并返回这个临时对象temp,从而实现后置++和后置--。在主程序中,我们对Complex对象a进行了多次++和--运算,并输出了运算结果,验证了运算符的正确性。注意,由于后置++和后置--返回的是临时对象,因此如果直接调用a--.show(),则不能正确输出a--的结果,必须使用(a--).show()的形式。
阅读全文