【C++】实现复数类的重载

xiaoxiao2022-04-28  42

复数类的功能及要求

复数对于从小学习数学的我们并不陌生,其操作性相对比较简单。复数类主要考察的是我们对运算符重载的熟练程度,主要有四则运算的+、-、×、/,以及+=、-=、>、<、==、!=前置++,后置++的运算符重载。复数类共有两个参数,实部(_real)与虚部(_imag),因此需要定义两个成员变量,具体的实现思路如下。

复数类的设计思路

设计思路主要针对复数的四则运算展开:即+、-、×、/。复数的加法+、减法-遵守的规则为实部-实部,虚部-虚部,乘法的运算规则为(a+bi)(c+di)=(ac-bd)+(bc+ad)i ,除法较为复杂,运算规则为:(a+bi)/(c+di),化简为:(a+bi)(c-di)/(c+di)(c-di) = ((ac+bd)+(bc-ad)i)/(c2+d2)。除此之外的运算符重载比较简单,具体实现过程如下。

参考代码

complex.h
#include <iostream> #include <Windows.h> using namespace std; class Complex { public: Complex(double real,double imag) :_real(real) ,_imag(imag) {} Complex(const Complex& t) { _real = t._real; _imag = t._imag; } ~Complex() {} //运算符的重载 Complex& operator=(const Complex& t); bool operator==(const Complex& t); bool operator>(const Complex& t); bool operator<(const Complex& t); bool operator!=(const Complex& t); bool operator>=(const Complex& t); bool operator<=(const Complex& t); Complex operator++(); Complex operator++(int); Complex& operator+=(const Complex& t); Complex& operator-=(const Complex& t); Complex operator+(const Complex& t); Complex operator-(const Complex& t); Complex operator*(const Complex& t); Complex operator/(const Complex& t); friend ostream& operator<<(ostream& _cout,const Complex& c); private: double _real; double _imag; };
main.cpp
#include "complex.h" void FunTest() { Complex c1(1,2); Complex c2(3,4); Complex c3 = c1*c2; Complex c4 = ++c1; Complex c5 = c2++; Complex c6 = c2/c1; cout<<c3<<endl; cout<<c4<<endl; cout<<c5<<endl; cout<<c6<<endl; } int main() { FunTest(); system("pause"); return 0; }
complex.cpp
#include "complex.h" //= Complex& Complex::operator=(const Complex& t) { if(this != &t) { _real = t._real; _imag = t._imag; } return *this; } bool Complex::operator==(const Complex& t) { if(_imag != 0 || t._imag != 0) { cout<<"虚部不为0,无法比较!"<<endl; return false; } return (_real == t._real)&&(_imag == t._imag); } bool Complex::operator!=(const Complex& t) { return !(*this == t); } bool Complex::operator>(const Complex& t) { if(_imag != 0 || t._imag != 0) { cout<<"虚部不为0,无法比较大小!"<<endl; return false; } else { if(_real > t._real) return true; return false; } } bool Complex::operator<(const Complex& t) { if(_imag != 0 || t._imag != 0) { cout<<"虚部不为0,无法比较大小!"<<endl; return false; } return !(*this >= t); } bool Complex::operator>=(const Complex& t) { if(_imag != 0 || t._imag != 0) { cout<<"虚部不为0,无法比较大小!"<<endl; return false; } return (*this == t)||(*this > t); } bool Complex::operator<=(const Complex& t) { if(_imag != 0 || t._imag != 0) { cout<<"虚部不为0,无法比较大小!"<<endl; return false; } return (*this == t)||(*this < t); } Complex& Complex::operator+=(const Complex& t) { _real += t._real; _imag += t._imag; return *this; } Complex& Complex::operator-=(const Complex& t) { _real -= t._real; _imag -= t._imag; return *this; } Complex Complex::operator+(const Complex& t) { Complex temp(*this); temp._real += t._real; temp._imag += t._imag; return temp; } Complex Complex::operator-(const Complex& t) { Complex temp(*this); temp._real -= t._real; temp._imag -= t._imag; return temp; } Complex Complex::operator*(const Complex& t)//(a+bi)(c+di)=(ac-bd)+(bc+ad)i { Complex temp(*this); temp._real = this->_real*t._real - this->_imag*t._imag; temp._imag = this->_imag*t._real + this->_real*t._imag; return temp; } Complex Complex::operator/(const Complex& t)//(a+bi)(c-di)/(c+di)(c-di) { Complex temp(*this); temp._real = (this->_real*t._real+this->_imag*t._imag)/(t._real*t._real+t._imag*t._imag)\ +(this->_imag*t._real - this->_real*t._imag)/((t._real*t._real+t._imag*t._imag)); return temp; } Complex Complex::operator++() { ++_real; ++_imag; return *this; } Complex Complex::operator++(int) { Complex temp(*this); _real++; _imag++; return temp; } ostream& operator<<(ostream& _cout,const Complex& t) { _cout<<t._real<<"+"<<t._imag<<"i"<<endl; return _cout; }
转载请注明原文地址: https://www.6miu.com/read-4857921.html

最新回复(0)