Complex.cpp
#include<iostream>
#include<cmath>
#include"Complex.h"
using namespace std;
Complex::Complex(double r, double i) {
m_real = r;
m_image = i;
}
Complex operator+(Complex &c1, Complex &c2) {
return Complex(c1.m_real + c2.m_real, c1.m_image + c2.m_image);
}
Complex operator-(Complex &c1, Complex &c2) {
return Complex(c1.m_real - c2.m_real, c1.m_image - c2.m_image);
}
Complex operator*(Complex &c1, Complex &c2) {
return Complex(c1.m_real * c2.m_real, -(c1.m_image * c2.m_image));
}
Complex operator/(Complex &c1, Complex &c2) {
return Complex(((c1.m_real*c2.m_real) + (c1.m_image*c2.m_image)) / (c1.m_real*c1.m_real + c2.m_real*c2.m_real)
, ((c1.m_image*c2.m_real) - (c1.m_real*c2.m_image)) / (c1.m_real*c1.m_real + c2.m_real*c2.m_real));
}
Complex & Complex::operator=(Complex &c1) {
if (&c1 == this) return *this;
m_real = c1.m_real;
m_image = c1.m_image;
return *this;
}
Complex & Complex::operator++()
{
++m_real;
return *this;
}
Complex & Complex::operator--()
{
--m_real;
return *this;
}
Complex Complex::operator++(int)
{
Complex c = *this;
m_real++;
return c;
}
Complex Complex::operator--(int)
{
Complex c = *this;
m_real--;
return c;
}
Complex & Complex::operator+=(Complex &c1) {
m_real += c1.m_real;
m_image += c1.m_image;
return *this;
}
Complex & Complex::operator-=(Complex &c1) {
m_real -= c1.m_real;
m_image -= c1.m_image;
return *this;
}
Complex & Complex::operator*=(Complex &c1) {
m_real *= c1.m_real;
m_image *= -c1.m_image;
return *this;
}
Complex & Complex::operator/=(Complex &c1) {
m_real = ((c1.m_real*m_real) + (c1.m_image*m_image)) / (c1.m_real*c1.m_real + m_real * m_real);
m_image = ((c1.m_image*m_real) - (c1.m_real*m_image)) / (c1.m_real*c1.m_real + m_real * m_real);
return *this;
}
ostream& operator<<(ostream & cout, const Complex& c1) {
if (c1.image() >= 0)
cout << "Complex is:" << c1.m_real << " + " << c1.m_image << "i" << endl;
else
cout << "Complex is:" << c1.m_real << " - " << -c1.m_image << "i" << endl;
return cout;
}
istream& operator>>(istream &cin, Complex &c1) {
cout << "please input the real:";
cin >> c1.m_real;
cout << "please input the image:";
cin >> c1.m_image;
return cin;
}
bool operator==(const Complex &c1, const Complex &c2) {
return (c1.real() == c2.real()) && (c1.image() == c2.image());
}
double Complex::mod() { // 取模
return sqrt(this->m_real*this->m_real + this->m_image*this->m_image);
}
Complex Complex::conjugate() { // 共轭
Complex c;
c.m_real = this->m_real;
c.m_image = -this->m_image;
return c;
}
int main() {
Complex c1, c2;
cin >> c1 >> c2;
cout << c1 << c2;
system("pause");
return 0;
}
Complex.h
#pragma once
#include <iostream>
using namespace std;
class Complex {
public:
Complex(double r = 0, double i = 0);
friend Complex operator+(Complex &c1, Complex &c2);
friend Complex operator-(Complex &c1, Complex &c2);
friend Complex operator*(Complex &c1, Complex &c2);
friend Complex operator/(Complex &c1, Complex &c2);
friend ostream & operator<<(ostream &, const Complex &);
friend istream & operator>>(istream &, Complex &);
Complex & operator += (Complex &);
Complex & operator -= (Complex &);
Complex & operator *= (Complex &);
Complex & operator /= (Complex &);
Complex & operator = (Complex &);
Complex & operator++(); // 前置++
Complex & operator--(); // 前置--
Complex operator++(int); // 后置++
Complex operator--(int); // 后置--
double real() const { return m_real; }
double image() const { return m_image; }
double mod(); // 取模
Complex conjugate(); // 共轭
~Complex() {}
private:
double m_real;
double m_image;
};