为复数类增加重载的运算符-、-=,分别用成员函数和友元函数各做一遍
时间: 2024-03-13 08:47:20 浏览: 105
两个二维数组相加,用成员函数重载运算符“+”和“-”
5星 · 资源好评率100%
好的,我来解答你的问题。
首先,我们需要定义一个复数类,包括实部和虚部两个私有成员变量,以及一些公有成员函数和友元函数,代码如下:
```cpp
#include <iostream>
using namespace std;
class Complex
{
private:
double real; // 实部
double imag; // 虚部
public:
Complex(double r=0, double i=0):real(r), imag(i){} // 构造函数
void print() const { cout << "(" << real << ", " << imag << ")" << endl; } // 打印复数
Complex operator-() const { return Complex(-real, -imag); } // 负号运算符重载(成员函数)
friend Complex operator-(const Complex& c1, const Complex& c2); // 减法运算符重载(友元函数)
Complex& operator-=(const Complex& c); // 减等运算符重载(成员函数)
};
Complex operator-(const Complex& c1, const Complex& c2) // 减法运算符重载(友元函数)
{
return Complex(c1.real-c2.real, c1.imag-c2.imag);
}
Complex& Complex::operator-=(const Complex& c) // 减等运算符重载(成员函数)
{
real -= c.real;
imag -= c.imag;
return *this;
}
```
上述代码中,我们定义了一个复数类 `Complex`,其中:
- `Complex(double r=0, double i=0)` 是构造函数,可以用来初始化实部和虚部;
- `print()` 是打印复数的函数;
- `operator-()` 是负号运算符的重载,用于实现复数的取负;
- `operator-(const Complex& c1, const Complex& c2)` 是减法运算符的重载,用于实现复数的减法;
- `operator-=(const Complex& c)` 是减等运算符的重载,用于实现复数的减等运算。
其中,负号运算符重载是一个成员函数,因为只需要操作一个复数对象;减法运算符重载是一个友元函数,因为需要操作两个复数对象;减等运算符重载是一个成员函数,因为需要修改当前复数对象的值。
现在,我们可以编写测试代码,来验证这些运算符的重载是否正确:
```cpp
int main()
{
Complex c1(1, 2), c2(3, 4);
cout << "c1 = "; c1.print();
cout << "c2 = "; c2.print();
Complex c3 = -c1;
cout << "-c1 = "; c3.print();
Complex c4 = c1 - c2;
cout << "c1 - c2 = "; c4.print();
c1 -= c2;
cout << "c1 -= c2, c1 = "; c1.print();
return 0;
}
```
输出结果如下:
```
c1 = (1, 2)
c2 = (3, 4)
-c1 = (-1, -2)
c1 - c2 = (-2, -2)
c1 -= c2, c1 = (-2, -2)
```
可以看到,运算符的重载实现是正确的。
阅读全文