Код:
#include <iostream>
using namespace std;
class ComplexNum
{
public:
/*****Constructors*****/
ComplexNum();
ComplexNum(float);
ComplexNum(float, float);
ComplexNum(const ComplexNum&);
/*****Unary operators*****/
ComplexNum& operator=(const ComplexNum&);
ComplexNum operator-();
/*****Binary operators with complex number as rhs*****/
ComplexNum operator+(const ComplexNum&);
ComplexNum operator-(const ComplexNum&);
ComplexNum operator*(const ComplexNum&);
ComplexNum operator/(const ComplexNum&);
/*****Binary operators with float as rhs*****/
ComplexNum operator+(const float);
ComplexNum operator-(const float);
ComplexNum operator*(const float);
ComplexNum operator/(const float);
/*****Other Methods*****/
void Print();
/*****Members*****/
private:
float m_rVal, m_iVal;
};
//CONSTRUCTORS
ComplexNum::ComplexNum()
{
m_rVal = 0;
m_iVal = 0;
}
ComplexNum::ComplexNum(float realNum)
{
m_rVal = realNum;
m_iVal = 0;
}
ComplexNum::ComplexNum(float realNum, float imagNum)
{
m_rVal = realNum;
m_iVal = imagNum;
}
ComplexNum::ComplexNum(const ComplexNum& rhs)
{
m_rVal = rhs.m_rVal;
m_iVal = rhs.m_iVal;
}
ComplexNum& ComplexNum::operator=(const ComplexNum& rhs)
{
if(this!=&rhs)
{
m_rVal = rhs.m_rVal;
m_iVal = rhs.m_iVal;
}
return *this;
}
ComplexNum ComplexNum::operator-()
{
ComplexNum result(-(*this).m_rVal, -(*this).m_iVal);
return result;
}
//UNARY OPERATORS
ComplexNum ComplexNum::operator+(const ComplexNum& rhs)
{
ComplexNum result((*this).m_rVal+rhs.m_rVal, (*this).m_iVal+rhs.m_iVal);
return result;
}
ComplexNum ComplexNum::operator-(const ComplexNum& rhs)
{
ComplexNum result((*this).m_rVal-rhs.m_rVal, (*this).m_iVal-rhs.m_iVal);
return result;
}
ComplexNum ComplexNum::operator*(const ComplexNum& rhs)
{
ComplexNum result((*this).m_rVal*rhs.m_rVal - (*this).m_iVal*rhs.m_iVal, (*this).m_rVal*rhs.m_iVal + (*this).m_iVal*rhs.m_rVal);
return result;
}
ComplexNum ComplexNum::operator/(const ComplexNum& rhs)
{
float denom = rhs.m_rVal*rhs.m_rVal + rhs.m_iVal*rhs.m_iVal;
if(denom!=0)
{
ComplexNum result(((*this).m_rVal*rhs.m_rVal + (*this).m_iVal*rhs.m_iVal)/denom, ((*this).m_iVal*rhs.m_rVal - (*this).m_rVal*rhs.m_iVal)/denom);
return result;
}
else
{
cout<<"Error, cannot divide by 0";
ComplexNum result(0, 0);
return result;
}
}
//BINARY OPERATORS
ComplexNum ComplexNum::operator+(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this+tmpVal;
}
ComplexNum ComplexNum::operator-(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this-tmpVal;
}
ComplexNum ComplexNum::operator*(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this*tmpVal;
}
ComplexNum ComplexNum::operator/(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this/tmpVal;
}
//OTHER METHODS
void ComplexNum::Print()
{
cout<<m_rVal<<" + i("<<m_iVal<<")";
}
//TEST PROGRAM
int main()
{
int k=13;
ComplexNum tmp(2, 3);
ComplexNum tmp2(k, 7);
tmp.Print(); //Print
cout<<"\n";
tmp2.Print(); //Print
cout<<"\n";
(tmp+tmp2).Print(); //Addition
cout<<"\n";
(tmp-tmp2).Print(); //Subtraction
cout<<"\n";
(tmp*tmp2).Print(); //Multiplication
cout<<"\n";
(tmp/tmp2).Print(); //Division
cout<<"\n";
(tmp+3).Print(); //Addition with int
cout<<"\n";
(tmp-4).Print(); //Subtraction with int
cout<<"\n";
(tmp*5).Print(); //Multiplication with int
cout<<"\n";
(tmp/6).Print(); //Division with int
cout<<"\n";
(-tmp).Print(); //Unary minus
cout<<"\n";
tmp=tmp2; //Assignment
tmp.Print();
int pause;
cin>>pause;
return 0;
}