Помогите исправить ошибку в коде, неправильно выводит результат операций operator- и operator/
Вот сам код:
Код:
/*Определите в классе Complex следующие операции:
Complex& operator=(const Complex&); - копирование
Complex& operator+(const Complex&); - сложение
Complex& operator-(const Complex&); - вычитание
Complex& operator*(const Complex&); - умножение
Complex& operator/(const Complex&); - деление
Complex& operator+=(const Complex&); - сложение
Complex& operator-=(const Complex&); - вычитание
Complex& operator*=(const Complex&); - умножение
Complex& operator/=(const Complex&); - деление
friend ostream& operator<<(ostream& os, const Complex&); - вывод
friend istream& operator>>(istream& is, Complex&); - ввод */
#include <iostream>
using namespace std;
class Complex
{
private:
double re;
double im;
public:
Complex() : re(0), im(0) {}
Complex(double r, double i) : re(r), im(i) {}
Complex(const Complex &c) : re(c.re), im(c.im) {}
Complex& operator=(const Complex&c)
{
re = c.re;
im = c.im;
return *this;
}
Complex& operator+(const Complex&c)
{
re = re + c.re;
im = im + c.im;
return *this;
}
Complex& operator-(const Complex&c)
{
re = re - c.re;
im = im - c.im;
return *this;
}
Complex& operator*(const Complex&c)
{
double r = re * c.re - im * c.im;
double i = re * c.im + im * c.re;
re = r;
im = i;
return *this;
}
Complex& operator/(const Complex&c)
{
double d = c.re * c.re + c.im * c.im;
double r = (re * c.re + im * c.im) / d;
double i = (im * c.re - re * c.im) / d;
re = r;
im = i;
return *this;
}
Complex& operator+=(const Complex&c)
{
re += c.re;
im += c.im;
return *this;
}
Complex& operator-=(const Complex&c)
{
re -= c.re;
im -= c.im;
return *this;
}
Complex& operator*=(const Complex&c)
{
double r = re * c.re - im * c.im;
double i = re * c.im + im * c.re;
re = r;
im = i;
return *this;
}
Complex& operator/=(const Complex&c)
{
double d = c.re * c.re + c.im * c.im;
double r = (re * c.re + im * c.im) / d;
double i = (im * c.re - re * c.im) / d;
re = r;
im = i;
return *this;
}
friend ostream& operator<<(ostream& os, const Complex&a)
{
if (a.im < 0) os << a.re << a.im << "i" << endl;
else os << a.re << "+" << a.im << "i" << endl;
return os;
}
friend istream& operator>>(istream& is, Complex&a)
{
is >> a.re >> a.im;
return is;
}
~Complex() {}
};
int main()
{
setlocale(LC_ALL, "rus");
Complex compl1, compl2;
cout << "Введите 1-е компл.число: ";
cin >> compl1;
cout << compl1 << endl;
cout << "Введите 2-е компл.число: ";
cin >> compl2;
cout << compl2 << endl;
Complex a = compl1 + compl2;
cout << "1. Сложение: " << a;
Complex b = compl1 - compl2;
cout << "2. Вычитание: " << b;
Complex c = compl1 * compl2;
cout << "3. Умножение: " << c;
Complex d = compl1 / compl2;
cout << "4. Деление: " << d;
cout << endl;
Complex a1 = compl1;
a1 += compl2;
cout << "1. Сложение (сокращ.форма): " << a1;
Complex b1(compl1);
b1 -= compl2;
cout << "2. Вычитание (сокращ.форма): " << b1;
Complex c1(compl1);
c1 *= compl2;
cout << "3. Умножение (сокращ.форма): " << c1;
Complex d1(compl1);
d1 /= compl2;
cout << "4. Деление (сокращ.форма): " << d1;
return 0;
}